Мой сайт, над которым я работаю, находится на фарси, и весь текст отображается как ????? (вопросительные знаки). Я изменил сортировку моих таблиц 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 . " => " . $table . " CONVERTED<br />"; } } ?>
Плохие новости. Но сначала дважды проверьте:
SELECT col, HEX(col)...
чтобы увидеть, что находится в таблице. Если hex показывает 3F
, данные исчезнут. Правильно сохраненный символ dal
должен быть шестнадцатеричным D8AF
; hah
– шестнадцатеричный D8AD
.
Что случилось:
SET NAMES latin1
действовал (по умолчанию, но ошибочно) CHARACTER SET latin1
(по умолчанию, но неправильно) По мере того как вы INSERTed
данные, он был преобразован в latin1, который не имеет значений для символов фарси, поэтому заменяли вопросительные знаки.
Лечение (для будущих «INSERT»):
CHARACTER SET utf8
<meta...utf8>
должен находиться в верхней части. Вышеприведенное обсуждение касается CHARACTER SET
, кодирования символов. Теперь для подсказки на COLLATION
, которая используется для сравнения и сортировки.
Если вы хотите, чтобы с ними обращались равными: 'بسم' = 'بسم', используйте utf8_unicode_ci (вместо utf8_general_ci) для COLLATION
.