Złe wieści. Ale najpierw sprawdź dokładnie:
SELECT col, HEX(col)...
aby zobaczyć, co jest w tabeli. Jeśli w kodzie szesnastkowym jest 3F
, to dane znikają. Prawidłowo przechowywany dal
znak powinien być szesnastkowy D8AF
; hah
to szesnastkowy D8AD
.
Co się stało:
- miałeś dane zakodowane w utf8 (dobre)
SET NAMES latin1
obowiązywał (domyślnie, ale źle)- kolumna została zadeklarowana
CHARACTER SET latin1
(domyślnie, ale źle)
Podczas INSERTed
dane zostały przekonwertowane na latin1, który nie ma wartości dla znaków farsi, więc zastąpiły je znaki zapytania.
Lekarstwo (na przyszłe `INSERTY):
- Przekoduj swoją aplikację przy użyciu interfejsu mysqli_* zamiast przestarzałego interfejsu mysql_*.
- dane zakodowane w formacie utf8 (dobre)
- mysqli_set_charset('utf8')
- sprawdź, czy domyślne kolumny i/lub tabela to
CHARACTER SET utf8
- Jeśli wyświetlasz na stronie internetowej,
<meta...utf8>
powinien znajdować się blisko góry.
Powyższa dyskusja dotyczy CHARACTER SET
, kodowanie znaków. A teraz wskazówka na temat COLLATION
, który służy do porównywania i sortowania.
Jeśli chcesz, aby były traktowane jako równe:'بِسْمِ' ='بسم', użyj utf8_unicode_ci (zamiast utf8_general_ci) dla COLLATION
.