Конфликт параметров сортировки MySQL и кодировки PHP

#php #mysql #character-encoding #collation

#php #mysql #кодировка символов #параметры сортировки

Вопрос:

У меня есть куча датского текста, взятого из базы данных MySQL на латинице-1, и он отображается правильно при повторении в PHP. Проблема начинается, когда мне нужно повторить некоторые другие датские символы, которые не взяты из базы данных.

То, что я делаю, на самом деле выводит заголовок

 Content-Type: text/html; charset=iso-8859-1
  

также разрешить корректное отображение символов, не запрашиваемых запросом.

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

Комментарии:

1. вместо этого вам следует переключиться на utf-8

Ответ №1:

То, что данные хранятся в таблице сортировки latin-1, не означает, что они закодированы в latin-1. Это связано с тем, что MySQL не выполняет никакого перевода символов, когда настройка соединения SET NAMES совпадает с настройкой сортировки.

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

Для получения дополнительной помощи, пожалуйста, не могли бы вы добавить подробности о:

  • Установленная вами кодировка соединения MySQL
  • Подробности о том, откуда берутся «не запрашиваемые» символы

Комментарии:

1. Не используйте SET NAMES но mysql_set_charset .

2. что ж, это сработает, если вы используете адаптер MySQL по умолчанию. Я включил подробную информацию о различных методах в зависимости от адаптера в сообщение в блоге, которое я написал пару недель назад: webmonkeyuk.wordpress.com/2011/04/23 /…

Ответ №2:

Используйте Unicode. UTF-8 => правильный путь.

Итак, установите utf8_unicode_ci в базе данных, UTF-8 в качестве кодировки страницы и перед вашим запросом установите mysql_query («SET NAMES UTF8»);