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 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ć.