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 latin1obowią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 .