Вчера я уже несколько часов занимался этой проблемой:
У меня есть база данных на сервере MySQL 4.1.22 с кодировкой «UTF-8 Unicode (utf8)» (как сообщает phpMyAdmin). Таблицы в этой базе данных имеют кодировку по умолчанию, установленную на латинский2. Но веб-приложение (CMS Made Simple, написанное на PHP), использующее его, отображает страницы в utf8 ...
Как ни крути, но на самом деле это работает. Веб-приложение правильно отображает символы (в основном используются чешский и польский языки).
Я запускаю: «mysqldump -u xxx -p -h yyy dbname> dump.sql». Это дает мне сценарий SQL, который:
Теперь я хочу экспортировать эту базу данных на другой сервер, работающий на MySQL 5.0.67, также с серверной кодировкой, установленной на «UTF-8 Unicode (utf8)». Я скопировал всю установку CMS Made Simple, скопировал сценарий dump.sql и запустил «mysql -h ddd -u zzz -p dbname <dump.sql». После этого все символы шифруются при отображении веб-страниц CMSMS.
Пробовал ставить:
УСТАНОВИТЬ character_set_client = utf8;
УСТАНОВИТЬ character_set_connection = latin2;
И все комбинации (на всякий случай, даже если для меня это не имеет никакого смысла): latin2 / utf8, latin2 / latin2, utf8 / utf8 и т. д. - не помогают. Все персонажи по-прежнему зашифрованы, но иногда по-другому :).
Я также попытался заменить все настройки latin2 на utf8 в скрипте (установить имена и кодировки по умолчанию для таблиц). Ничего такого.
Есть ли здесь какие-нибудь эксперты по MySQL, которые могли бы в нескольких словах объяснить (я уверен, что это все-таки просто), как на самом деле работает весь этот материал по кодированию? Я прочитал 9.1.4. Наборы символов подключения и сопоставления, но ничего полезного там не нашел.
Спасибо, Мэтт






Ух ... ладно, вроде нашел решение.
MySQL здесь не виноват. Я сделал простой дамп и загрузил его, не внося изменений в скрипт dump.sql, то есть оставил "набор имен latin2" и кодировки таблиц такими, какими они были. Затем я переключил свою исходную установку CMSMS на новую базу данных и ... она работала правильно. Так что на самом деле кодировка в базе данных в порядке, или, по крайней мере, она отлично работает с установкой CMSMS, которую я установил у моего старого хостинг-провайдера (CMSMS, очевидно, делает забавные вещи с кодировкой символов).
Чтобы заставить его работать на моем новом хостинг-провайдере, мне действительно пришлось добавить эту строку в lib / adodb / drivers / adodb-mysql.inc.php при установке CMSMS:
mysql_query('set names latin2',$this->_connectionID);Это немного измененное решение от эта почта. Там же вы можете найти точную строку. Так что это похоже на проблему с конфигурацией клиента mysql.
Вы пытались добавить параметр --default-character-set = name, например:
mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql
У меня была эта проблема раньше, и она сработала после использования этой опции.
Надеюсь, это поможет!
Мне только что пришлось нелегко с этой проблемой, большое спасибо за решение!
добавление --default-character-set=latin2 решило эту проблему для меня, так как мой файл был закодирован ISO-8859
РЕШЕНИЕ для меня:
установите эту опцию в вашем php файле после mysql_connect (или после mysql_select_db) ..
mysql_query("SET NAMES 'utf8'");
+1, добавление
--default-character-set=utf8решило для меня аналогичную проблему.