Получение права кодирования действительно сложно: слишком много слоев:
Команда SQL «SET CHARSET utf8» из PHP гарантирует, что клиентская сторона (PHP) получит данные в utf8, независимо от того, как они хранятся в базе данных. Конечно, они должны быть правильно сохранены.
Кодировка, определенная для таблицы / столбца, на самом деле не означает, что данные находятся в этой кодировке , Если у вас есть таблица, определенная как utf8
, но сохраненная как различная кодировка, тогда MySQL будет рассматривать их как utf8
, и у вас проблемы. Это означает, что вам нужно сначала исправить это.
Вам нужно проверить, какая кодировка потока данных на каждом уровне.
Если вы получаете данные, например. windows-1250
и хотите сохранить в utf-8
, затем используйте этот SQL перед сохранением:
SET NAMES 'cp1250';
Если у вас есть данные в DB как windows-1250
и вы хотите вернуться utf8
, используйте:
SET CHARSET 'utf8';
Не используйте слишком «умные» инструменты для отображения данных. Например. phpMyAdmin делает (делал, когда я его использовал) кодирование действительно плохо. И он проходит через все слои, поэтому его трудно узнать. Кроме того, в Internet Explorer было действительно глупо поведение «угадывания» кодировки, основанной на странных правилах. Используйте простые редакторы, где вы можете переключать кодировку. Кроме того, я рекомендую MySQL Workbench.