Heim >Datenbank >MySQL-Tutorial >Eine Einführung in die Ursachen für verstümmelte MySQL-Zeichen und wie man das UTF8-Datenformat einstellt
Der Inhalt dieses Artikels befasst sich mit den Gründen für verstümmelte MySQL-Zeichen und der Methode zum Festlegen des UTF8-Datenformats. Ich hoffe, dass er für Sie hilfreich ist.
Eines der schmerzhaftesten Dinge bei der Verwendung von MySQL ist, dass die Ergebnisse verstümmelt sind. Das Festlegen des Kodierungsformats auf UTF8 kann dieses Problem lösen. Heute werden wir darüber sprechen, warum und wie man es so einrichtet.
MySQL-Zeichenformat
Zeichensatz
In Programmiersprachen verwenden wir Unicode, um chinesische Zeichen zu verarbeiten, und um zu verhindern, dass chinesische Zeichen verstümmelt werden Um die Netzwerkbandbreite zu reduzieren und Speicherplatz zu sparen, verwenden wir UTF8 zur Kodierung. Studenten, die nicht genug über den Unterschied zwischen den beiden wissen, können auf den Artikel „The Past and Present of Unicode Character Set and UTF8 Encoding“ verweisen.
In ähnlicher Weise können wir auch in MySQL die Codierungsmethode (Zeichensatz) der aktuellen Datenbankeinstellung überprüfen:
mysql> show variables like '%char%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec)
Die Tabelle ist der aktuell eingestellte Zeichensatz Es gibt mehrere Werte, auf die Sie nicht achten müssen:
character_set_filesystem | binär: Das Speicherformat im Dateisystem, der Standardwert ist binär (binär)
character_set_system | utf8: Das Speicherformat des Systems, der Standard ist utf8
character_sets_dir |. /usr/local/mysql/share/charsets/: Der Dateipfad der Zeichensätze, die verwendet werden können
Die übrigen Parameter sind die Parameter, die sich auf das tägliche Lesen und Schreiben verstümmelter Zeichen auswirken:
- Character_set_client: Der Zeichensatz für Client-Anforderungsdaten
- Character_set_connection: Der Zeichensatz für vom Client empfangene und dann übertragene Daten
- Character_set_database: Der Zeichensatz der Standarddatenbank; wenn keine Standarddatenbank vorhanden ist, verwenden Sie das Feld Character_set_server
- Character_set_results: Zeichensatz des Ergebnissatzes
- Character_set_server: Standardzeichensatz des Datenbankservers
Der Zeichensatzkonvertierungsprozess ist in drei Schritte unterteilt:
1 Der Client fordert Datenbankdaten an und die gesendeten Daten verwenden den Zeichensatz „character_set_client“
2. Nachdem die MySQL-Instanz die vom Client gesendeten Daten empfangen hat, konvertiert sie sie in den Zeichensatz „character_set_connection“
3. Konvertieren Sie beim Ausführen interner Vorgänge den Datenzeichensatz in den Zeichensatz für interne Operationen:
(1) Verwenden Sie den Zeichensatz-Einstellungswert jedes Datenfelds
(2) Wenn er nicht vorhanden ist, verwenden Sie den Standard-Zeichensatz-Einstellungswert der entsprechenden Datentabelle
(3) Wenn er nicht vorhanden ist, verwenden Sie den Standardwert für die Zeichensatzeinstellung der entsprechenden Datenbank
(4) Wenn er nicht vorhanden ist, verwenden Sie den Wert „character_set_server“ Legen Sie den Wert fest
4 der Operationsergebniswert aus dem internen Operationszeichensatz zu „character_set_results“
Zeichenreihenfolge
Bevor wir über die Zeichenreihenfolge sprechen, müssen wir einige Grundkenntnisse verstehen:
Zeichen bezieht sich auf die kleinstes ideografisches Symbol in der menschlichen Sprache. Beispiel: „A“, „B“ usw.;
Weisen Sie jedem Zeichen einen Wert zu und verwenden Sie diesen Wert, um das entsprechende Zeichen darzustellen Kodierung des Zeichens (Encoding ). Weisen wir beispielsweise dem Zeichen „A“ den Wert 0 und dem Zeichen „B“ den Wert 1 zu, dann ist 0 die Kodierung des Zeichens „A“;
ergibt eine Reihe von Zeichen und weist die entsprechende Kodierung zu. Die Menge aller dieser Zeichen- und Kodierungspaare ist schließlich der Zeichensatz (Character Set). Wenn die angegebene Zeichenliste beispielsweise {'A','B'} ist, ist {'A'=>0, 'B'=>1} ein Zeichensatz
Zeichensortierung bezieht sich auf die Vergleichsregeln zwischen Zeichen im gleichen Zeichensatz.
Nachdem wir die Zeichenfolge bestimmt haben, können wir erst dann definieren, was äquivalente Zeichen in einem Zeichensatz sind und was die Unterschiede zwischen ihnen sind Zeichen Die Größenbeziehung;
Jede Zeichenfolge entspricht eindeutig einem Zeichensatz, aber ein Zeichensatz kann mehreren Zeichenfolgen entsprechen, von denen eine die Standardzeichenfolge ist (Standardsortierung); >
mysql> show variables like 'collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec)Die üblichen Zeichenfolgen, die utf8 entsprechen, sind: utf8_unicode_ci/utf8_general_ci und utf8_bin usw. Was sind also ihre Unterschiede? 1. _bin wird im Binärformat gespeichert. Beim Speichern von Binärinhalten wird die Groß-/Kleinschreibung beachtet. 2. Die Korrekturlesegeschwindigkeit ist gering schlecht. Verwenden Sie es, wenn Sie Chinesisch und Englisch verwenden. utf8_unicode_ci: Hohe Genauigkeit, aber die Korrekturlesegeschwindigkeit ist etwas langsam. und Russland. Detaillierte Unterschiede finden Sie unter
Die Sortierregeln utf8_unicode_ci und utf8_general_ci in Mysql Zusammenfassung der Unterschiede.
Zeichensatz und Zeichenreihenfolge ändern
Wenn bei der Verbindung mit MySQL verstümmelte Zeichen auftreten, kann grundsätzlich festgestellt werden, dass die Zeichensatz-/Reihenfolgeeinstellungen nicht einheitlich sind. Das Standardformat latin1 von MySQL unterstützt kein Chinesisch. Da wir uns in China befinden, haben wir das utf8-Format gewählt, das Chinesisch und verschiedene Sprachen sehr vollständig unterstützt. Daher müssen wir den Zeichensatz und die Zeichenreihenfolge, auf die wir achten müssen, in das utf8-Format ändern.
Sie können auch das utf8mb4-Format wählen, das das Speichern von Emoji unterstützt
Das obige ist der detaillierte Inhalt vonEine Einführung in die Ursachen für verstümmelte MySQL-Zeichen und wie man das UTF8-Datenformat einstellt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!