point212
@point212
сисадмин linux, программист php

Проблемы с кодировкой (ASP,ADO,Mysql,Win2008Server)

Сегодня сервер внезапно сошёл с ума и начал выдавать из БД данные в cp1251, при том что они хранятся в ней в utf8.
Кто виноват и что делать?

Впрочем начну сначала:
Есть сервак с сайтом. На нем Win2008 Server Standard (Английская)
Mysql 5.1, Mysql-odbc-connector, ASP (без .NET), IIS 7.

Крутится сайтик написанный на ASP. До сегодняшнего утра все работало нормально.
Сайтик берет данные для отображения из БД. А там они все хранятся в UTF8.
В my.ini везде default-charset=utf8.
В БД в каждой табличке в свойствах utf8. В свойствах БД — тоже utf8.

Однако при запросе из БД данные поступают в CP1251. Куда копать?

ЗЫ Перезагружать, переустанавливать mysql-odbc-connector пробовал. Выгружать дамп БД, и загружать занова — тоже.
  • Вопрос задан
  • 5152 просмотра
Решения вопроса 1
DenisIT
@DenisIT
Привет — обычно такая проблема возникает когда кодировка соединения стоит Latin 1

можешь посмотреть настройки следующим запросом:

SHOW GLOBAL VARIABLES LIKE 'char%';

Что в результате?
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
DenisIT
@DenisIT
Дальше можешь попробовать добавить charset=UTF8 в строку соединения mysql-odbc

Driver={MySQL ODBC 3.51 Driver};Server=myServerAddress; charset=UTF8; Database=myDataBase;
User=myUsername;Password=myPassword;Option=3;
Ответ написан
DenisIT
@DenisIT
В таком случае попробуй посмотреть что MySQL скажет о созданной таблице — попробуй выполнить следующий запрос:

SHOW CREATE TABLE `table_name`

В итоге получим что то вроде:

CREATE TABLE `table_name` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Тут мы и посмотрим как он хранит инфу в таблице:
Ответ написан
DenisIT
@DenisIT
Если уверен что данные в таблице храняться в cp1251 можешь попробовать

ALTER TABLE your_Table_Name MODIFY `Descr` varchar(255) CHARACTER SET utf8;
Ответ написан
point212
@point212 Автор вопроса
сисадмин linux, программист php
В общем буду ждать программиста. Я то админ. И с ASP знаком только понаслышке. И с Виндами тоже.
Ответ написан
Комментировать
Wott
@Wott
посмотри кодовую страницу сессии — если установлена другая, то все успешно перекодируется
Ответ написан
Комментировать
point212
@point212 Автор вопроса
сисадмин linux, программист php
Всем спасибо. Проблему решить не удалось. Удалось лишь обойти.
На резервном серваке пришлось переустановить винду. И вот там тоже сразу не работало как надо.
Но там дело оказалось в переменных mysql (первый ответ DenisIT).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы