URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6587
[ Назад ]

Исходное сообщение
"Perl и MySQL проблема с кодировкой"

Отправлено Frei , 30-Окт-09 16:46 
Здравствуйте.

При переносе сайта на хостинг от исполнителя возникла ситуация, когда CMS получала информацию из базы данных в неверной кодировке. Несколько других CMS работают на этом же хостинге нормально, phpMyAdmin так же получает данные в нормальном виде.

Задали вопрос исполнителю:

"
При переносе сайта, вами было указано, что кодировка базы данных и дампа - cp1251. Нами была создана база данных на хостинге с указанной кодировкой и произведён импорт данных, но сайт по-прежнему не правильно отображает символы. В базе данных, при работе через phpMyAdmnin тексты читаются нормально. Как решить эту проблему?
"
Ответ:

"
Это происходит потому что perl получает данные в другой кодировке (не cp1251)
По всей видимости mysqlclient на сервере (через библиотеки которого работает perl)
по прежнему настроен на другую кодировку (скорее всего UTF-8,
т.к. phpMyAdmin по умолчанию использует именно UTF-8)
"

Возможна ли такая ситуация? Не всё ли равно на какую кодировку настроена mysqlclient? Что теперь под каждую CMS заводить свой mysqlclient? :)


Содержание

Сообщения в этом обсуждении
"Perl и MySQL проблема с кодировкой"
Отправлено angra , 31-Окт-09 08:59 
Если дамп действительно залит корректно, то исполнитель лепит тупые отмазки. Если он не догадался при инициализации работы с базой сделать SET NAMES это его проблемы, если не умеет работать с юникодом(а при работе с БД там есть нюансы) в perl это опять таки его проблемы.
Но перед тем как ставить ему претензии убедитесь что дамп залит действительно корректно. Для этого нужен консольный mysql клиент (обычно он всегда ставится вместе с сервером) и эмулятор терминала способный менять кодировку(например konsole или gnome-terminal). Далее выставляем различные русские кодировки в терминале, делаем соответствующий set names и select с какой-нибудь таблицы с русскими символами. Если русский во всех кодировках отображается правильно(за исключением пары символов типа кавычек), то дамп залит корректно.

А вообще правильно снятый дамп всегда корректно заливается через стандартный консольный клиент ибо содержит и определения таблиц и указание своей кодировки, так что если это не так, то опять таки вина разработчика.


"Perl и MySQL проблема с кодировкой"
Отправлено Frei , 02-Ноя-09 14:17 
Правильно ли я понимаю?:

Кодировка работы mysqlclient с базой данных не имеет значения? Главное чтобы правильно работали скрипты с mysqlclient?

Пример:

1. База cp1251
2. MySQL и mysqlclient работают по UTF8
3. Скрипты perl работают с базой по cp1251

Всё должно работать корректно?


"Perl и MySQL проблема с кодировкой"
Отправлено angra , 02-Ноя-09 15:13 
Что есть mysqlclient? Консольный клиент по имени mysql знаю, либу libmysql знаю, даже mysql_client_test знаю, а вот mysqlclient не знаю :)
Есть еще другие факторы, которые могут вызывать проблему, однако действовать надо методично. Когда выполните указанную мной в предыдущем способе проверку, тогда и перейдем к ним.