Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gespeicherte nicht-englische Zeichen, erhielt '?????' - Problem mit dem MySQL-Zeichensatz

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 .