Schlechte Nachrichten. Aber überprüfen Sie zuerst:
SELECT col, HEX(col)...
um zu sehen, was in der Tabelle steht. Wenn das Hex 3F
anzeigt , dann sind die Daten weg. Richtig gespeichert, das dal
Zeichen sollte hexadezimal sein D8AF
; hah
ist hex D8AD
.
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 Farsi-Zeichen hat, also wurden sie durch Fragezeichen ersetzt.
Das Heilmittel (für zukünftige `INSERTs):
- Codieren Sie Ihre Anwendung neu, indem Sie die mysqli_*-Schnittstelle anstelle der veralteten mysql_*-Schnittstelle verwenden.
- utf8-codierte Daten (gut)
- mysqli_set_charset('utf8')
- Überprüfen Sie, ob die Spalte(n) und/oder Tabellenstandardwerte
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.
Wenn Sie möchten, dass diese gleich behandelt werden:'بِسْمِ' ='بسم', dann verwenden Sie utf8_unicode_ci (statt utf8_general_ci) für die COLLATION
.