Загрузка дампов в кодировке UTF-8 в MySQL - PullRequest
9 голосов
/ 30 сентября 2008

Вчера я несколько часов пытался разобраться с этой проблемой:

У меня есть база данных на сервере MySQL 4.1.22 с установленной кодировкой «UTF-8 Unicode (utf8)» (как сообщает phpMyAdmin). Таблицы в этой базе данных имеют набор символов по умолчанию, установленный на latin2 . Но веб-приложение (CMS Made Simple, написанное на PHP), использующее его, отображает страницы в utf8 ...

Как бы не облажалось это, на самом деле это работает. Веб-приложение правильно отображает символы (в основном используются чешский и польский языки).

Я запускаю: "mysqldump -u xxx -p -h yyy имя_базы> dump.sql". Это дает мне сценарий SQL, который:

  • отлично смотрится в любом редакторе (например, в Блокноте +) при отображении в UTF-8 - все символы отображаются правильно
  • для всех таблиц в скрипте по умолчанию установлено значение latin2
  • имеет "/ *! 40101 SET NAMES latin2 * /;" строка в начале (среди прочих настроек)

Теперь я хочу экспортировать эту базу данных на другой сервер, работающий на MySQL 5.0.67, также с кодировкой сервера, установленной на "UTF-8 Unicode (utf8)". Я скопировал всю установку CMS Made Simple, скопировал скрипт dump.sql и запустил «mysql -h ddd -u zzz -p dbname

Я попытался установить:
SET character_set_client = utf8;
SET character_set_connection = latin2;

И все комбинации (просто для безопасности, даже если это не имеет никакого смысла для меня): latin2 / utf8, latin2 / latin2, utf8 / utf8 и т. Д. - не помогают. Все персонажи по-прежнему зашифрованы, но иногда по-другому:).

Я также попытался заменить все настройки latin2 на utf8 в скрипте (задать имена и наборы символов по умолчанию для таблиц). Ничего.

Есть ли здесь эксперты по MySQL, которые могли бы объяснить в нескольких словах (я уверен, что все просто), как на самом деле работает весь этот код? Я читаю 9.1.4. Наборы символов и параметры соединения , но ничего полезного там не найдено.

Спасибо, Matt

Ответы [ 3 ]

30 голосов
/ 30 сентября 2008

Вы пытались добавить опцию --default-character-set = name, например:

mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql

У меня была такая проблема раньше, и она работала после использования этой опции.

Надеюсь, это поможет!

0 голосов
/ 16 января 2014

РЕШЕНИЕ для меня:

установите эту опцию в вашем php-файле после mysql_connect (или после mysql_select_db ) ..

mysql_query("SET NAMES 'utf8'");
0 голосов
/ 30 сентября 2008

Тьфу ... хорошо, кажется, я нашел решение.

MySQL здесь не виноват. Я выполнил простой дамп и загрузку без изменений в сценарии dump.sql, то есть оставил «set names latin2» и таблицы charsets такими, какими они были. Затем я переключил свою первоначальную установку CMSMS на новую базу данных и ... она работала правильно. Так что на самом деле кодирование в базе данных в порядке, или, по крайней мере, оно отлично работает с установкой CMSMS, которую я установил у моего старого хостинг-провайдера (очевидно, CMSMS делает забавные вещи с кодировкой символов ).

Чтобы это работало на моем новом хостинг-провайдере, мне фактически пришлось добавить эту строку в lib / adodb / drivers / adodb-mysql.inc.php при установке CMSMS:

mysql_query('set names latin2',$this->_connectionID);

Это слегка измененное решение из этого поста . Вы можете найти точную линию там же. Похоже, проблема конфигурации клиента mysql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...