Heim >Datenbank >MySQL-Tutorial >So lösen Sie das Problem verstümmelter chinesischer Zeichen in MySQL
1. MySQL wird angezeigt Der Grund für verstümmelte chinesische Zeichen
Wenn wir eine MySQL-Datenbank verwenden, stoßen wir häufig auf das Problem verstümmelter Zeichen. Schauen Sie sich den folgenden Code an.
mysql> create table test(id int,name varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> insert into test values(1,'宋蔚然'); ERROR 1366 (HY000): Incorrect string value: '\xE5\xAE\x8B\xE8\x94\x9A...' for column 'name' at row 1 mysql>
Verwandte Lernempfehlungen: MySQL-Video-Tutorial
Offensichtlich wird beim Einfügen von Chinesisch ein Fehler gemeldet. Was ist der Grund?
mysql> show variables like '%CHARACTER%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
character_set_client Die vom Client verwendete Zeichenkodierung
character_set_connection Die von der Datenbankverknüpfung verwendete Kodierung
character_set_database Die von der Datenbank verwendete Zeichenkodierung
Es stellt sich heraus, dass die Zeichenkodierung nicht einheitlich ist mit der Kodierung des Servers und der Datenbank.
2. Lösung für verstümmelte chinesische Zeichen in MySQL
Methode 1: Namen festlegen
mysql> set names latin1; mysql> set names latin1; Query OK, 0 rows affected (0.00 sec) mysql> select * from test; Empty set (0.00 sec) mysql> insert into test values(1,'宋蔚然'); Query OK, 1 row affected (0.01 sec) mysql> select * from test; +------+-----------+ | id | name | +------+-----------+ | 1 | 宋蔚然 | +------+-----------+ 1 row in set (0.00 sec)
Komm wieder Schauen Sie sich die Zeichensatzeinstellungen an
mysql> show variables like '%CHARACTER%'; +--------------------------+----------------------------+ | 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/share/mysql/charsets/ | +--------------------------+----------------------------+
Wenn die Zeichenkodierung vereinheitlicht ist, gibt es keine verstümmelten Zeichen.
Um das Problem verstümmelter Zeichen zu lösen, muss die Zeichenkodierung des Clients mit der Kodierung des Servers und der Datenbank vereinheitlicht werden. Die Server- und Datenbankcodierungen sind hier latin1, und das Festlegen aller Namen auf latin1 kann das verstümmelte Problem vorübergehend lösen.
Methode 2: Ändern Sie den Zeichensatz der Datenbankkonfigurationsdatei auf UTF8
UTF8 unterstützt viele Sprachsysteme, daher wird dringend empfohlen, die Zeichenkodierung auf einzustellen UTF8 in Produktion. Öffnen Sie die Datenbankkonfigurationsdatei und fügen Sie den folgenden Inhalt unter [Client], [MySQL] und [MySQL] hinzu.
#vi /mysql/data/3306/my.cnf [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci
Starten Sie die Datenbank neu
[root@test ~]# systemctl restart mysqld
Erstellen Sie die Erstellungsbibliothek und -tabelle
mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> use test; Database changed mysql> create table test(id int,name varchar(10)); Query OK, 0 rows affected (0.02 sec) mysql> insert into test values(1,'宋蔚然'); Query OK, 1 row affected (0.00 sec) mysql> select * from test; +------+-----------+ | id | name | +------+-----------+ | 1 | 宋蔚然 | +------+-----------+ 1 row in set (0.00 sec)
Werfen wir einen Blick auf die Einstellungen des Zeichensatzes
🎜1. Der Grund, warum chinesische verstümmelte Zeichen in MySQL erscheinen
mysql> show variables like '%CHARACTER%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+Offensichtlich wird beim Einfügen chinesischer Schriftzeichen ein Fehler gemeldet. Was ist der Grund?
mysql> create table test(id int,name varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> insert into test values(1,'宋蔚然'); ERROR 1366 (HY000): Incorrect string value: '\xE5\xAE\x8B\xE8\x94\x9A...' for column 'name' at row 1 mysql>
2. Lösung für verstümmelte chinesische Zeichen in MySQL
Methode 1: Namen festlegen
mysql> show variables like '%CHARACTER%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+Komm wieder Schauen Sie sich die Zeichensatzeinstellungen an
mysql> set names latin1; mysql> set names latin1; Query OK, 0 rows affected (0.00 sec) mysql> select * from test; Empty set (0.00 sec) mysql> insert into test values(1,'宋蔚然'); Query OK, 1 row affected (0.01 sec) mysql> select * from test; +------+-----------+ | id | name | +------+-----------+ | 1 | 宋蔚然 | +------+-----------+ 1 row in set (0.00 sec)
Methode 2: Ändern Sie den Zeichensatz der Datenbankkonfigurationsdatei auf UTF8
mysql> show variables like '%CHARACTER%'; +--------------------------+----------------------------+ | 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/share/mysql/charsets/ | +--------------------------+----------------------------+Starten Sie die Datenbank neu
#vi /mysql/data/3306/my.cnf [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ciSchreiben Sie die erstellte Bibliothek und Tabelle neu
[root@test ~]# systemctl restart mysqldWerfen wir einen Blick auf die Zeichensatzeinstellungen
mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> use test; Database changed mysql> create table test(id int,name varchar(10)); Query OK, 0 rows affected (0.02 sec) mysql> insert into test values(1,'宋蔚然'); Query OK, 1 row affected (0.00 sec) mysql> select * from test; +------+-----------+ | id | name | +------+-----------+ | 1 | 宋蔚然 | +------+-----------+ 1 row in set (0.00 sec)
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem verstümmelter chinesischer Zeichen in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!