Проблемы с кодировкой символов в MySQL - для сортировки задано значение UTF-8, но текст хранится как ISO Latin 1

У меня есть таблица, для которой установлено значение ut8_general_ci. Для столбцов в таблице также задана эта кодировка.

По какой-то причине, когда я просматриваю свою таблицу в MySQL, текст в таблице отображается / сохраняется как ISO Latin 1, и если я не хочу редактировать какой-либо текст в любой из моих записей в таблице, я должен использовать Кодировка ISO Latin 1 для обеспечения правильного отображения текста на странице (пользовательский UTF8 страницы).

Ввод текста ISO Latin 1 в таблицу вручную обычно работает, но для нескольких записей он не работает, т.е. символы не отображаются правильно на моей странице (они также не отображаются правильно, когда я использую UTF8). Отсюда и этот вопрос. Если бы я мог понять, как MySQL обрабатывает кодировку символов, я бы, вероятно, решил эту проблему.

Итак, вопрос в том, может ли кто-нибудь объяснить, как MySQL обрабатывает кодирование, и, в частности, почему я вижу символы ISO Latin 1 в своей таблице, когда для сортировки установлено значение UTF-8.


person Nick    schedule 14.08.2012    source источник
comment
Как у вас настроено подключение? Скорее всего, ваше соединение установлено на latin1 ...   -  person Romain    schedule 14.08.2012
comment
Прочтите: Обработка Unicode спереди назад в веб-приложении   -  person deceze♦    schedule 14.08.2012
comment
Просто введите «SET NAMES UTF8» в консоль MySQL, прежде чем что-либо запрашивать.   -  person mvillaress    schedule 14.08.2012
comment
@ decereé Спасибо, эта статья выглядит очень полезной. Я пытаюсь реализовать тестовую php-страницу из статьи, но по какой-то причине в базу данных ничего не вставляется. Я уверен, что все настройки базы данных верны. Когда я вручную добавляю запись в таблицу «тексты», я получаю следующую ошибку на странице PHP: Notice: Undefined index: text in /home/...../php/encoding_test.php on line 56. Можете ли вы сказать, в чем может быть проблема с кодом для страницы?   -  person Nick    schedule 14.08.2012


Ответы (1)


Оказывается, несмотря на установку кодировки символов на странице, в таблице и столбцах таблицы, соединение с таблицей по умолчанию было ISO Latin 1. Добавление «SET NAMES utf8» в мой запрос устранило это, т.е.

$pdo = new PDO('mysql:dbname=****;host=localhost', '****', '****',
                array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

Ссылка на deceze статьи была очень полезной. Спасибо!

person Nick    schedule 16.08.2012