Проблемы кодировки символов: MySQL 5.0 + PHP 5.2 - PullRequest
0 голосов
/ 06 января 2011

У меня есть база данных MySQL с таблицей InnoDB, содержащей поля utf8_general_ci varchar.Когда я получаю их через PHP (через PEAR :: MDB2) и пытаюсь вывести их (через Smarty), я получаю ???символы.Я хотел бы знать, как решить эту проблему, которая, скорее всего, вызвана PHP.

Полезная информация:

  • Это новая версия сайта.работая, у старой версии была та же проблема, хотя она не использовала ни Smarty, ни MDB2, поэтому они, скорее всего, не причина.Старый программист использовал htmlentities () для исправления проблемы, но я стараюсь избежать этого.
  • Кодировка символов всех моих файлов (шаблон, источник и т. Д.) - UTF-8 без спецификации.
  • Когда я отображаю страницу, все акцентированные символы (те, что в шаблонах, а не те, что исходят из MySQL) отображаются правильно, и кодировка в браузере - UTF-8.Если я вручную переключу его на ISO-8859-1, то символы из MySQL будут правильно выведены, но не другие.

По сути, кажется, что PHP или MySQL преобразует данные UTF-8содержится в базе данных по ISO-8859-1 в какой-то момент во время процесса запроса / выборки, и это то, что я хочу исправить.

Я провел большой поиск, но не нашел никакого решенияи я надеюсь, что проблема заключается в установке где-то.Я хотел бы избежать использования htmlentities () или utf8_encode (), однако это может быть единственным способом, пока не появится PHP6.

Спасибо за ваш вклад в это!

Ответы [ 2 ]

1 голос
/ 06 января 2011

Вам нужно выполнить несколько запросов, чтобы указать использовать UTF-8 для соединения (по умолчанию действительно Latin-1).Вот что я использую:

SET CHARACTER SET = "utf8";
SET character_set_database = "utf8";
SET character_set_connection = "utf8";
SET character_set_server = "utf8";

Я знаю, что некоторые из них кажутся излишними, но они были протестированы и, кажется, работают довольно хорошо ...

0 голосов
/ 06 января 2011

Я предполагаю, что при попадании в базу данных данные не кодировались в формате utf-8.

...