Сохраненные неанглийские символы, получившие '?????' – Ошибка набора символов MySQL

Мой сайт, над которым я работаю, находится на фарси, и весь текст отображается как ????? (вопросительные знаки). Я изменил сортировку моих таблиц DB на UTF8_general_ci, но он все еще показывает ???

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

Я хочу знать, что я делаю неправильно

<?php // your connection mysql_connect("mysql.ord1-1.websitesettings.com","user_name","pass"); mysql_select_db("895923_masihiat"); // convert code $res = mysql_query("SHOW TABLES"); while ($row = mysql_fetch_array($res)) { foreach ($row as $key => $table) { mysql_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci"); echo $key . " =&gt; " . $table . " CONVERTED<br />"; } } ?> 

Плохие новости. Но сначала дважды проверьте:

 SELECT col, HEX(col)... 

чтобы увидеть, что находится в таблице. Если hex показывает 3F , данные исчезнут. Правильно сохраненный символ dal должен быть шестнадцатеричным D8AF ; hah – шестнадцатеричный D8AD .

Что случилось:

  • у вас были utf8-кодированные данные (хорошие)
  • SET NAMES latin1 действовал (по умолчанию, но ошибочно)
  • столбец был объявлен CHARACTER SET latin1 (по умолчанию, но неправильно)

По мере того как вы INSERTed данные, он был преобразован в latin1, который не имеет значений для символов фарси, поэтому заменяли вопросительные знаки.

Лечение (для будущих «INSERT»):

  • Перекодируйте приложение, используя интерфейс mysqli_ *, вместо устаревшего интерфейса mysql_ *.
  • utf8-кодированные данные (хорошие)
  • mysqli_set_charset ( 'utf8')
  • убедитесь, что столбец (столбцы) и / или таблица по умолчанию – CHARACTER SET utf8
  • Если вы показываете на веб-странице, <meta...utf8> должен находиться в верхней части.

Вышеприведенное обсуждение касается CHARACTER SET , кодирования символов. Теперь для подсказки на COLLATION , которая используется для сравнения и сортировки.

Если вы хотите, чтобы с ними обращались равными: 'بسم' = 'بسم', используйте utf8_unicode_ci (вместо utf8_general_ci) для COLLATION .