2008-09-30 2 views
9

Я потянув меня выслушаю над этой проблемой в течение нескольких часов вчера:Загрузка UTF-8 кодируются дамп в MySQL

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

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

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

  • выглядит идеально в любом редакторе (например, Notepad +) при отображении в 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 < dump.sql». После этого все символы скремблируются при отображении веб-страниц CMSMS.

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

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

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

Есть ли здесь эксперты MySQL, которые могли бы объяснить всего несколькими словами (я уверен, что это просто все-таки), как действительно работает весь этот материал кодирования? Я читал 9.1.4. Connection Character Sets and Collations, но ничего не нашел.

Спасибо, Matt

ответ

0

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

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

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

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

Это немного модифицированный раствор из this post. Вы также можете найти точную линию. Таким образом, он выглядит как проблема конфигурации клиента mysql.

28

ли вы попробуйте добавить --default-символьный набор = вариант названия, например:

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

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

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

+2

+1, добавляя `--default-характе- set = utf8` решил для меня аналогичную проблему. – Jonik 2011-07-27 14:30:10

0

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

установить эту опцию в файле PHP, после mysql_connect (или после mysql_select_db) ..

mysql_query("SET NAMES 'utf8'"); 
Смежные вопросы