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 arabskich (kurdyjski/farsi/itp.), więc zastąpiły je znaki zapytania.
Lekarstwo (na przyszłe INSERTs ):
- dane zakodowane w formacie utf8 (dobre)
mysqli_set_charset('utf8')(lub cokolwiek, czego potrzebuje twój klient do ustanowieniaCHARACTER SET)- 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.
Aby dokładnie sprawdzić, czy dane są przechowywane poprawnie, wykonajSELECT col, HEX(col)... .هرچوون powinien wrócić D987E2808CD8B1DA86D988D988D986
Znaki arabskie w utf8 mają szesnastkę D8xx lub D9xx.
(utf8mb4 działa tak samo dobrze jak utf8; albo działa w języku arabskim.)
Zła wiadomość:dane, które zostały wstawione i przekształcone w „???” nie można odzyskać.