Heim  >  Artikel  >  Datenbank  >  Eine Einführung in die Ursachen für verstümmelte MySQL-Zeichen und wie man das UTF8-Datenformat einstellt

Eine Einführung in die Ursachen für verstümmelte MySQL-Zeichen und wie man das UTF8-Datenformat einstellt

不言
不言nach vorne
2019-03-27 10:05:312531Durchsuche

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

Eine Einführung in die Ursachen für verstümmelte MySQL-Zeichen und wie man das UTF8-Datenformat einstellt

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); >

Die Namen der Zeichenfolgen in MySQL folgen der Namenskonvention: Beginnen Sie mit dem Zeichensatznamen, der der Zeichenfolge entspricht; beginnen Sie mit _ci (Groß-/Kleinschreibung wird nicht beachtet), _cs (Groß-/Kleinschreibung beachtet) oder _bin (zeigt den Vergleich durch Kodierung an). Wert, binär) am Ende. Beispiel: Unter der Zeichenfolge „utf8_general_ci“ sind die Zeichen „a“ und „A“ gleichwertig.

Daher unterscheidet sich die Zeichenfolge vom Zeichensatz und wird für den Gleichheits- oder Größenvergleich der Datenbank verwendet Felder. Schauen wir uns die von der MySQL-Instanz festgelegte Zeichenfolge an:

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen