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

wie man Akzentzeichen über Zeichen in meiner Datenbank speichert

UTF-8 ist (im Allgemeinen) eine „sichere“ Kodierung für jeden Zeichensatz der Welt. (Nicht immer die effizienteste, und es gibt einige Argumente dafür, dass Unicode die CJK-Skripte mit seinem „unified han“-Modell unterrepräsentiert, aber weitermachen …)

Es ist jedoch wahrscheinlich, dass Ihre Schnittstellenprogramme nicht richtig nach/von UTF-8 übersetzen. Beispielsweise sieht ó => ó so aus, als würden Ihnen die UTF-8-Daten (wobei ein Zeichen über eine unterschiedliche Anzahl von Bytes verteilt werden kann) mit einer europäischen Single-Byte-Codierung wie ISO-8859-15 oder MS- präsentiert. CP-1451 oder ähnlich.

Sie sind wahrscheinlich Daten korrekt speichern, aber laden es falsch. Wenn Sie nur mysql verwenden Terminalprogramm oder ähnliches, vergewissern Sie sich, dass Ihr Terminal auf die Verwendung von UTF-8 eingestellt ist (auf einem Unix/Linux-System locale sollte wahrscheinlich etwas sein, das auf .utf8 endet , z.B. meins hat LANG=en_US.utf8 )

Wenn Sie Daten mit einem GUI-Tool oder ähnlichem abrufen, überprüfen Sie dessen Einstellungen/Präferenzen-Panel auf den Zeichensatz.

Wenn Sie die falsch übersetzten Zeichen in eine von Ihnen geschriebene Anwendung zurückbekommen, sehen Sie sich die Tools Ihrer Sprache zum Festlegen des Gebietsschemas an. (Vielleicht ist die INSERT Routinen haben es richtig, aber die SELECT Routinen haben es falsch?)

Und wenn dies an das Web gesendet wird, stellen Sie sicher, dass Ihre (XML|HTML|XHTML)-Dateien charset=utf8 haben an der/den entsprechenden Stelle(n) deklariert, oder Übersetzen Sie (falls möglich) von UTF-8 in den Zeichensatz Ihres Dokuments zurück, indem Sie so etwas wie iconv verwenden beim Einfügen von Text aus der Datenbank. (Die meisten Nicht-Unicode-Zeichensätze können natürlich nur eine Teilmenge von Unicode darstellen; z. B. leistet der ISO-8859-15-Satz gute Arbeit bei der Abdeckung europäischer Sprachen, unterstützt jedoch keine kyrillischen, arabischen oder CJK-Schriftsysteme es ist möglich, dass ein Zeichen nicht übersetzt werden kann.) In Perl können Sie Pass-Argumente für open verwenden oder verwenden Sie binmode um eine transparente Zeichensatzübersetzungsschicht auf einem "filehandle"-Stream einzurichten.