Здравствуйте.При переносе сайта на хостинг от исполнителя возникла ситуация, когда CMS получала информацию из базы данных в неверной кодировке. Несколько других CMS работают на этом же хостинге нормально, phpMyAdmin так же получает данные в нормальном виде.
Задали вопрос исполнителю:
"
При переносе сайта, вами было указано, что кодировка базы данных и дампа - cp1251. Нами была создана база данных на хостинге с указанной кодировкой и произведён импорт данных, но сайт по-прежнему не правильно отображает символы. В базе данных, при работе через phpMyAdmnin тексты читаются нормально. Как решить эту проблему?
"
Ответ:"
Это происходит потому что perl получает данные в другой кодировке (не cp1251)
По всей видимости mysqlclient на сервере (через библиотеки которого работает perl)
по прежнему настроен на другую кодировку (скорее всего UTF-8,
т.к. phpMyAdmin по умолчанию использует именно UTF-8)
"Возможна ли такая ситуация? Не всё ли равно на какую кодировку настроена mysqlclient? Что теперь под каждую CMS заводить свой mysqlclient? :)
Если дамп действительно залит корректно, то исполнитель лепит тупые отмазки. Если он не догадался при инициализации работы с базой сделать SET NAMES это его проблемы, если не умеет работать с юникодом(а при работе с БД там есть нюансы) в perl это опять таки его проблемы.
Но перед тем как ставить ему претензии убедитесь что дамп залит действительно корректно. Для этого нужен консольный mysql клиент (обычно он всегда ставится вместе с сервером) и эмулятор терминала способный менять кодировку(например konsole или gnome-terminal). Далее выставляем различные русские кодировки в терминале, делаем соответствующий set names и select с какой-нибудь таблицы с русскими символами. Если русский во всех кодировках отображается правильно(за исключением пары символов типа кавычек), то дамп залит корректно.А вообще правильно снятый дамп всегда корректно заливается через стандартный консольный клиент ибо содержит и определения таблиц и указание своей кодировки, так что если это не так, то опять таки вина разработчика.
Правильно ли я понимаю?:Кодировка работы mysqlclient с базой данных не имеет значения? Главное чтобы правильно работали скрипты с mysqlclient?
Пример:
1. База cp1251
2. MySQL и mysqlclient работают по UTF8
3. Скрипты perl работают с базой по cp1251Всё должно работать корректно?
Что есть mysqlclient? Консольный клиент по имени mysql знаю, либу libmysql знаю, даже mysql_client_test знаю, а вот mysqlclient не знаю :)
Есть еще другие факторы, которые могут вызывать проблему, однако действовать надо методично. Когда выполните указанную мной в предыдущем способе проверку, тогда и перейдем к ним.