Was ist passiert:
- Du hattest utf8-codierte Daten (gut)
SET NAMES latin1
war in Kraft (Standard, aber falsch)- die Spalte wurde als
CHARACTER SET latin1
deklariert (Standard, aber falsch)
Wie Sie INSERTed
Die Daten wurden in latin1 konvertiert, das keine Werte für arabische (kurdische/farsi/usw.) Zeichen hat, also wurden sie durch Fragezeichen ersetzt.
Das Heilmittel (für zukünftige INSERTs
):
- utf8-codierte Daten (gut)
mysqli_set_charset('utf8')
(oder was auch immer Ihr Client zum Erstellen desCHARACTER SET
benötigt )- Überprüfen Sie, ob die Spalten und/oder Tabellen standardmäßig
CHARACTER SET utf8
sind - Wenn Sie auf einer Webseite anzeigen,
<meta...utf8>
sollte ganz oben stehen.
Die obige Diskussion dreht sich um CHARACTER SET
, die Kodierung von Zeichen. Nun zu einem Tipp zu COLLATION
, die zum Vergleichen und Sortieren verwendet wird.
Um zu überprüfen, ob die Daten korrekt gespeichert sind, führen Sie SELECT col, HEX(col)...
aus .هرچوون
sollte zurückkommen D987E2808CD8B1DA86D988D988D986
Arabische Zeichen in utf8 haben hexadezimal D8xx oder D9xx.
(utf8mb4
funktioniert genauso gut wie utf8
; beides funktioniert für Arabisch.)
Schlechte Nachrichten:Die eingefügten und in „???“ umgewandelten Daten kann nicht wiederhergestellt werden.