Лоши новини. Но първо проверете:
SELECT col, HEX(col)...
за да видите какво има в таблицата. Ако шестнадесетичният показва 3F
, тогава данните са изчезнали. Правилно съхранен, dal
символът трябва да бъде шестнадесетичен D8AF
; hah
е шестнадесетичен D8AD
.
Какво се случи:
- имахте данни, кодирани в utf8 (добри)
SET NAMES latin1
беше в сила (по подразбиране, но погрешно)- колоната е декларирана
CHARACTER SET latin1
(по подразбиране, но погрешно)
Както сте INSERTed
данните бяха преобразувани в latin1, което няма стойности за фарси знаци, така че въпросителни знаци ги замениха.
Лечението (за бъдещи `INSERTs):
- Прекодирайте приложението си, като използвате интерфейса mysqli_* вместо отхвърления интерфейс mysql_*.
- utf8-кодирани данни (добри)
- mysqli_set_charset('utf8')
- проверете дали колоната(ите) и/или таблицата по подразбиране са
CHARACTER SET utf8
- Ако показвате на уеб страница,
<meta...utf8>
трябва да е близо до върха.
Дискусията по-горе е за CHARACTER SET
, кодиране на знаци. Сега за съвет относно COLLATION
, който се използва за сравняване и сортиране.
Ако искате те да бъдат третирани еднакво:'بِسْمِ' ='بسم', тогава използвайте utf8_unicode_ci (вместо utf8_general_ci) за COLLATION
.