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

Дамп-файл MySQL и кодировки. Нужна помощь

Преамбула

Итак. Есть у меня база данных одного сайтика. Дело происходит на Винде. 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?

Помогите люди добрые понять где глюк засел.
  • Вопрос задан
  • 9066 просмотров
Пригласить эксперта
Ответы на вопрос 4
Ничего не сказано каким образом данные попадали в базу. Но мне видится, что они туда писались в CP1251.
Ответ написан
@rPman
Консоль в windows с кодировкой cp866, поэтому и 'кракозяблы'… что в test.txt?
mysql .... -e "select * from table" > test.txt
Ответ написан
VBKesha
@VBKesha
В начале дампа иногда тоже неплохо бы написать SET NAMES utf8;
Ответ написан
Wott
@Wott
Судя по акту №4 в базе данные в CP1251, хотя акт №2 не сопрягается с актом №4 — видимо вы все таки где-то ошиблись.
Как вариант сконвертируйте поля с русским текстом в blob и посмотрите что получиться
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы