Проблемы с кодировкой (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. Куда копать?
именно так и написано в коде charset=UTF8.
Более того. Я для надежности ниже написал запрос SET NAMES UTF8;
Ничего. Никакой реакции.
Зато когда ставишь SET NAMES CP1251 корявые буквы превращаются в нормальные.
Такое ощущение что в базе реально хранится инфа в CP1251. Но как это может быть если я даже пробовал заливать дамп в свежесозданную БД с кодировкой UTF8, из файла который гарантированно содержал UTF8…
Если нет, то обрати внимание, что если отправляемый заголовок отличается от кодировки данных, то все выводимые данные нужно так же перекодировать в кодировку, указываемую в отправляемом заголовке.
А как это проверить? :)
Ну например делаю я mysqldump.exe -uuser -p database_name > filename.txt
Открываю получившийся filename.txt в Notepade++. Жму «Кодировки» -> UTF-8.
Русские буквы остаются русским. Значит кодировка получившегося файла — UTF-8.
Верно я мыслю?
Исходя из этого — в какой кодировке хранятся данные в БД? %)
2DenisIT: По разному. Изначально, на сайте отображалось похоже на «вариант 2». Но не уверен что именно так.
А вот письма с сервера сейчас приходят в «варианте 3»
2Catlion: в utf-8.
ЗЫ Строка коннекта прописана непосредственно в коде. Я уже приводил ее выше.
Могу посмотреть уже на сервере самостоятельно если это «нормально» можешь детали скинуть в личку ) иначе всё как то неопределённо выглядит если честно :)
Всем спасибо. Проблему решить не удалось. Удалось лишь обойти.
На резервном серваке пришлось переустановить винду. И вот там тоже сразу не работало как надо.
Но там дело оказалось в переменных mysql (первый ответ DenisIT).