Какво се случи:
- имахте данни, кодирани в utf8 (добри)
SET NAMES latin1
беше в сила (по подразбиране, но погрешно)- колоната е декларирана
CHARACTER SET latin1
(по подразбиране, но погрешно)
Както сте INSERTed
данните бяха преобразувани в latin1, което няма стойности за арабски (кюрдски/фарси/и т.н.) знаци, така че въпросителни знаци ги замениха.
Лечението (за бъдещи INSERTs
):
- utf8-кодирани данни (добри)
mysqli_set_charset('utf8')
(или каквото е необходимо на вашия клиент за установяване наCHARACTER SET
)- проверете дали колоната(ите) и/или таблицата по подразбиране са
CHARACTER SET utf8
- Ако показвате на уеб страница,
<meta...utf8>
трябва да е близо до върха.
Дискусията по-горе е за CHARACTER SET
, кодиране на знаци. Сега за съвет относно COLLATION
, който се използва за сравняване и сортиране.
За да проверите отново дали данните се съхраняват правилно, направетеSELECT col, HEX(col)...
.هرچوون
трябва да се върне D987E2808CD8B1DA86D988D988D986
Арабските знаци в utf8 имат шестнадесетичен от D8xx или D9xx.
(utf8mb4
работи също толкова добре, колкото utf8
; или работи за арабски.)
Лоши новини:Данните, които бяха вмъкнати и превърнати в „???“ не може да бъде възстановен.