Verstümmelte Zeichen und Lösungen im MySQL-Zeichensatz

Verstümmelte Zeichen und Lösungen im MySQL-Zeichensatz

Vorwort

Ein Zeichensatz ist eine Reihe von Symbolen und Kodierungsregeln. Ob in einer Oracle-Datenbank oder einer MySQL-Datenbank, es gibt das Problem der Zeichensatzauswahl. Wenn der Zeichensatz während der Datenbankerstellungsphase nicht richtig ausgewählt wird, muss der Zeichensatz möglicherweise später ersetzt werden. Das Ersetzen des Zeichensatzes ist ein relativ kostspieliger Vorgang und birgt auch gewisse Risiken. Daher empfehlen wir Ihnen, zu Beginn der Anwendung den geeigneten Zeichensatz entsprechend Ihren Anforderungen richtig auszuwählen, um später unnötige Anpassungen zu vermeiden.

Tatsächlicher Kampf

1. MySQL-Datenbank installieren

2. Demonstration des verstümmelten Codes

mysql> Variablen wie „character_set%“ anzeigen;
+--------------------------+----------------------------------+
| Variablenname | Wert |
+--------------------------+----------------------------------+
| Zeichensatzclient | utf8 |
| Zeichensatzverbindung | utf8 |
| Zeichensatzdatenbank | utf8 |
| Zeichensatz_Dateisystem | Binär |
| Zeichensatzergebnisse | utf8 |
| Zeichensatzserver | utf8 |
| Zeichensatzsystem | utf8 |
| Zeichensatzverzeichnis | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 Zeilen im Satz (0,00 Sek.)
 
mysql> in test.table10 Werte einfügen (1, 'null');
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
 
mysql> wähle * aus test.table10;
+------+----------+
| ID | Namen |
+------+----------+
| 1 | Kranich in den Wolken|
+------+----------+
1 Zeile im Satz (0,00 Sek.)
 
mysql> Namen festlegen latin1;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
 
mysql> wähle * aus test.table10;
+------+--------+
| ID | Namen |
+------+--------+
| 1 | ??? |
+------+--------+
1 Zeile im Satz (0,00 Sek.)
 
mysql> Variablen wie „character_set%“ anzeigen;
+--------------------------+----------------------------------+
| Variablenname | Wert |
+--------------------------+----------------------------------+
| character_set_client | latin1 #Von den Client-Quelldaten verwendeter Zeichensatz | character_set_connection | latin1 #Zeichensatz der Verbindungsebene | character_set_database | utf8 #Standardzeichensatz der aktuell ausgewählten Datenbank | character_set_filesystem | binary   
| character_set_results | latin1 #Abfrageergebnis-Zeichensatz |
| character_set_server | utf8 #Standard-Zeichensatz für interne Operationen |
| character_set_system | utf8 #Systemmetadaten (Feldnamen usw.) Zeichensatz | character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 Zeilen im Satz (0,00 Sek.)

Lösung für verstümmelten Code

Wie oben zu sehen ist, ändert set names latin1; drei Parameter. Solange Client, MySQL-Zeichensatz-Client und Tabellen-Zeichensatz vollständig konsistent sind, kann garantiert werden, dass keine verstümmelten Zeichen auftreten.

Weg:

1. Führen Sie den Satznamen xxx im MySQL-Befehlszeilenmodus aus.

 mysql> Namen festlegen utf8;
 Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

2. Geben Sie den Standardzeichensatz an, wenn Sie sich bei MySQL anmelden

 [root@node1 ~]# mysql -S /tmp/mysql.sock4 --defaults-character-set=utf8 #-S gibt die Socket-Datei für mehrere Instanzen von MySQL an.
 Verwenden Sie --defaults-character-set, um den Standardzeichensatz anzugeben.

3. Ändern Sie die Datei /etc/sysconfig/i18n, wenn my.cnf den Standardzeichensatz nicht angibt.

 vim /etc/sysconfig/i18n
 LANG='zh_CN.UTF-8' #Wenn my.cnf nicht angegeben ist, wird standardmäßig der Systemzeichensatz verwendet

​ 4. Ändern Sie die Datei my.cnf. Die folgenden beiden Felder können in jedem beliebigen Feld enthalten sein.

  [Kunde]
  Standardzeichensatz = Latin1
  [mysql]
  Standardzeichensatz = Latin1

Die ersten beiden 1 und 2 sind temporäre Lösungen und die letzten beiden 3 und 4 sind permanente Lösungen.

Zeichensatz anzeigen

1. Überprüfen Sie die aktuellen Zeichensatzeinstellungen des Systems, melden Sie sich bei MySQL an und führen Sie die Änderung aus. zeige nur Variablen 'character_set%';

mysql> zeige Variablen wie 'character_set%';#Ich habe es auf utf8 geändert, sodass die drei Parameter des Clients alle utf8 sind. Sie können den Zeichensatz selbst festlegen.
+--------------------------+----------------------------------+
| Variablenname | Wert |
+--------------------------+----------------------------------+
| Zeichensatzclient | utf8 |
| Zeichensatzverbindung | utf8 |
| Zeichensatzdatenbank | utf8 |
| Zeichensatz_Dateisystem | Binär |
| Zeichensatzergebnisse | utf8 |
| Zeichensatzserver | utf8 |
| Zeichensatzsystem | utf8 |
| Zeichensatzverzeichnis | /usr/local/mysql/share/charsets/ |

2. Häufig verwendete Zeichensätze für MySQL. Führen Sie den Befehl „show character set;“ aus, um die vom System unterstützten Zeichensätze anzuzeigen.

mysql> Zeichensatz anzeigen;
+----------+-----------------+---------------------+---------+
| Zeichensatz | Beschreibung | Standardsortierung | Maxlen |
+----------+-----------------+---------------------+---------+
| big5 | Big5 Traditionelles Chinesisch | big5_chinese_ci | 2 |
| dec8 | DEZ Westeuropäisch | dec8_swedish_ci | 1 |
| cp850 | DOS Westeuropäisch | cp850_general_ci | 1 |
| hp8 | HP Westeuropäisch | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russisch | koi8r_general_ci | 1 |
| latin1 | cp1252 Westeuropäisch | latin1_swedish_ci | 1 | #common | latin2 | ISO 8859-2 Mitteleuropäisch | latin2_general_ci | 1 |
| swe7 | 7-Bit Schwedisch | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanisch | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanisch | sjis_japanese_ci | 2 |
| Hebräisch | ISO 8859-8 Hebräisch | hebrew_general_ci | 1 |
| tis620 | TIS620 Thailändisch | tis620_thai_ci | 1 |
| euckr | EUC-KR Koreanisch | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainisch | koi8u_general_ci | 1 |
| gb2312 | GB2312 Vereinfachtes Chinesisch | gb2312_chinese_ci | 2 |
| Griechisch | ISO 8859-7 Griechisch | greek_general_ci | 1 |
| cp1250 | Windows Mitteleuropäisch | cp1250_general_ci | 1 |
| gbk | GBK vereinfachtes Chinesisch | gbk_chinese_ci | 2 | #Common | latin5 | ISO 8859-9 Türkisch | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenisch | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |#Allgemein | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russisch | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Tschechisch-Slowakisch | keybcs2_general_ci | 1 |
| macce | Mac Mitteleuropäisch | macce_general_ci | 1 |
| macroman | Mac Westeuropäisch | macroman_general_ci | 1 |
| cp852 | DOS Mitteleuropäisch | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltikum | latin7_general_ci | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | #Allgemein | cp1251 | Windows-Kyrillisch | cp1251_general_ci | 1 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| cp1256 | Windows-Arabisch | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| binär | Binärer Pseudozeichensatz | binär | 1 |
| geostd8 | GEOSTD8 Georgisch | geostd8_general_ci | 1 |
| cp932 | SJIS für Windows Japanisch | cp932_japanese_ci | 2 |
| eucjpms | UJIS für Windows Japanisch | eucjpms_japanese_ci | 3 |
+----------+-----------------+---------------------+---------+
39 Zeilen im Satz (0,00 Sek.)

Zeichensatzauswahl

1. Wenn Sie mit einer Vielzahl von Texten arbeiten und in Ländern und Regionen mit unterschiedlichen Sprachen veröffentlichen, wählen Sie Unicode. , für MySQL verwenden Sie UTF-8.

2. Wenn Sie nur Chinesisch benötigen, das Datenvolumen groß und die Leistungsanforderungen hoch sind, wählen Sie gbk.

3. Um mobile IoT-Dienste zu verarbeiten, wählen Sie utf8mb4

Es wird empfohlen, einen kleinen Zeichensatz zu verwenden, solange dieser die Anwendungsanforderungen vollständig erfüllen kann. Denn ein kleinerer Zeichensatz bedeutet eine Platzersparnis und eine Reduzierung der über das Netzwerk übertragenen Byte-Anzahl, gleichzeitig verbessert sich durch den geringeren Speicherplatz indirekt auch die Systemleistung.

Server-Zeichensatzeinstellungen

[mysqld]
...
character-set-server=utf8 #Fügen Sie diese Anweisung hinzu, um den serverseitigen Zeichensatz festzulegen.

Nach dem Neustart des MySQL-Servers ändern sich diese beiden Parameter auf die eingestellten Werte.

| Zeichensatzserver | utf8 
| Zeichensatzdatenbank | utf8

Zeichensatz wechseln

Konvertieren Sie eine Datenbank in einer Kodierung in Daten in einer anderen Kodierung.

Datenbank-DBName-Zeichensatz xxx ändern; #Gilt nur für zukünftige Daten und ist für vorherige Daten ungültig. Grundsätzlich nicht genutzt

Häufig verwendete Lösungen für Konvertierungsdatenbank-Zeichensätze

mysqldump -S /tmp/mysql.sock4 --default-character-set=utf8 -d test > /data/test-`date +%F`.sql #1. Exportieren Sie die Tabellenstruktur, ohne Daten zu exportieren vim /data/test-`date +%F`.sql
Tabelle löschen, wenn `table10` vorhanden ist;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET Zeichensatzclient = utf8 */;
CREATE TABLE `table10` (
 `id` int(11) DEFAULT NULL,
 `Namen` char(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; #2. Ändern Sie hier den CHARSET in den Zeichensatz, den Sie ändern möchtenmysqldump -S /tmp/mysql.sock4 --extended-insert --no-create-info test > /data/test-data-`date +%F`.sql #3. Dateninhalt exportierenvim /data/test-data-`date +%F`.sql
SPERRT TABELLEN `table10` SCHREIBEN;
Namen festlegen utf8; #4, diese Zeile wird hinzugefügt, geben Sie den Zeichensatz an, den Sie konvertieren möchten INSERT INTO `table10` VALUES (1,'云中鹤');
TABELLEN ENTSPERREN;

mysql> Datenbank erstellen, wenn nicht vorhanden, Test; #5. Erstellen Sie eine Datenbank zum Speichern der konvertierten Daten. Abfrage OK, 1 Zeile betroffen, 0 Warnungen (0,00 Sek.)

mysql -S /tmp/mysql.sock4 test < /data/test-`date +%F`.sql #6. Tabellenstruktur importierenmysql -S /tmp/mysql.sock4 test < /data/test-data-2015-09-25.sql #7. Tabellendaten importieren

endlich

Dies ist die Notiz, die ich gemacht habe, als ich 2015 MySQL lernte. Ich teile sie heute mit Ihnen.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Beispiellösung zum Schreiben verstümmelter chinesischer Zeichen in MySQL in PHP
  • Lösung für das Problem mit verstümmeltem MySQL-Code unter Linux
  • So lösen Sie das Problem verstümmelter chinesischer Zeichen beim Einfügen von Tabellendaten in MySQL
  • Zusammenfassung der Behandlung des Problems der Ausnahme mit verstümmeltem Code bei der JDBC-Verbindung MySQL
  • Detaillierte Erläuterung der Lösung für verstümmelte Zeichen, wenn JDBC eine Verbindung zu MySQL herstellt, um Chinesisch zu verarbeiten
  • Detaillierte Erklärung des Problems mit verstümmelten chinesischen Schriftzeichen in der MySQL-Datenbank
  • Lösen Sie das Problem verstümmelter Daten bei der MySQL-Datenbankmigration

<<:  Vue implementiert Chat-Schnittstelle

>>:  Detaillierte Erklärung der Firewall-Regeleinstellungen und Befehle (Whitelist-Einstellungen)

Artikel empfehlen

Detaillierte Erklärung der Transaktionen und Indizes in der MySQL-Datenbank

Inhaltsverzeichnis 1. Angelegenheiten: Vier Haupt...

JavaScript-Grundlagen dieser Verweisung

Inhaltsverzeichnis Das Verfahren Im Objekt Verste...

Detaillierte Erklärung zur Verwendung des Grep-Befehls in Linux

1. Offizielle Einführung grep ist ein häufig verw...

MySQL startet langsames SQL und analysiert die Ursachen

Schritt 1. Aktivieren Sie die langsame MySQL-Abfr...

Detaillierte Erläuterung der TCPdump-Befehlsbeispiele in Linux

Vorwort Einfach ausgedrückt ist tcpdump ein Paket...

Die Rolle und Öffnung des MySQL-Protokolls für langsame Abfragen

Vorwort Das MySQL Slow Query Log ist ein Protokol...

Fünf Lösungen für Cross-Browser-Probleme (Zusammenfassung)

Kurz zusammengefasst: Browserkompatibilitätsprobl...