Преамбула
Итак. Есть у меня база данных одного сайтика. Дело происходит на Винде. Mysql 5.5.
Кодировки везде стоят в UTF8.
mysql> show global variables like 'char%';
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
Сама БД создана с charset=utf8 и collation=utf8_general_ci
Все таблички в ней так же с charset=utf8 и collation=utf8_general_ci
Акт I
Ладно. Коннектимся из скрипта на ASP через ADODB (ODBC). Напоминаю что дело происходит в Винде.
Вот строчка коннекта:
Driver={MySQL};Stmt=SET NAMES 'utf8';SERVER=localhost;DATABASE=Mybase;UID=Myuser;PWD=Mypass;
Выбираем записи из таблицы и видим… абракадабру.
Методом подбора кодировок страницы в Файрфоксе понимаем что это CP1251.
Да, но как?!!!
Акт II
Ладно. Делаю mysqldump.
Открываю дамп в Notepad++
Иду в меню Encoding и убеждаюсь что кодировка — UTF8. Все русские буквы в дампе нормально читаются.
Для надёжности делаю Encoding — Convert to UTF8. Русские буквы остались русскими.
Заливаю обработанный дамп (теперь то уж точно в UTF8) в базу.
И… ничего. Опять абракадабра.
Акт III
Ладно. Может быть виноват Воландеморт? Может тёмные силы прячуться где-то между Mysql и скриптом на ASP?
Подключаюсь к базе через консольный mysql-клиент.
Делаю выборку — то же самое. Абракадабра. Да как же так?
Данные заливали в UTF8, база в UTF8.
Акт IV
Блин. Пишу свой скрипт в Notepad++. Строго слежу чтобы кодировка в редакторе была UTF8. В нём добавляю в ту же таблицу несколько записей захардкоденых в скрипт.
Получаю обратно через консоль, скриптик и даже через Navicat.
Что за чёрт? Мой скрипт добавил данные в UTF8. А, те которые были залиты в базу из дампа оказались в CP1251 (напоминаю что файлик дампа содержал данные в UTF8).
Асе V
О_О WTF?
Помогите люди добрые понять где глюк засел.