ㅋㅋㅋ
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>
관련 학습 권장 사항:
분명히 중국어를 삽입할 때 오류가 발생하는 이유는 무엇입니까?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 클라이언트에서 사용하는 문자 인코딩 character_set_connection 데이터베이스 링크에서 사용하는 인코딩 character_set_database 데이터베이스에서 사용하는 문자 인코딩 문자 인코딩이 서버 및 데이터베이스의 인코딩과 통일되지 않은 것으로 나타났습니다.
2. MySQL의 중국어 문자 깨짐 해결 방법
문자 세트 설정을 살펴보겠습니다.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)
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/ | +--------------------------+----------------------------+통합 문자 인코딩을 사용하면 문자 깨짐을 방지할 수 있습니다.
문자 깨짐 문제를 해결하려면 실제로 클라이언트의 문자 인코딩을 서버 및 데이터베이스의 인코딩과 통합해야 합니다. 여기서 서버 및 데이터베이스 인코딩은 latin1이며 모든 이름을 latin1로 설정하면 왜곡된 문제를 일시적으로 해결할 수 있습니다.
UTF8은 다양한 언어 시스템을 지원하므로 프로덕션에서는 문자 인코딩을 UTF8로 설정하는 것이 좋습니다. 데이터베이스 구성 파일을 열고 [client], [mysql], [mysqld] 아래에 각각 다음 내용을 추가합니다.
#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데이터베이스 재시작
[root@test ~]# systemctl restart mysqld생성 라이브러리 및 테이블 다시 작성
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)문자 집합 설정을 살펴보겠습니다
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/ | +--------------------------+----------------------------+> , 문자가 왜곡되는 문제가 자주 발생합니다. 다음 코드를 참조하세요.
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>
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 클라이언트에서 사용하는 문자 인코딩 character_set_connection 데이터베이스 링크에서 사용하는 인코딩 character_set_database 데이터베이스에서 사용하는 문자 인코딩 문자 인코딩이 서버 및 데이터베이스의 인코딩과 통일되지 않은 것으로 나타났습니다.
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)문자 세트 설정을 살펴보겠습니다.
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/ | +--------------------------+----------------------------+통합 문자 인코딩을 사용하면 문자 깨짐을 방지할 수 있습니다.
방법 2: 데이터베이스 구성 파일 문자 집합을 UTF8로 수정
UTF8은 다양한 언어 시스템을 지원하므로 프로덕션에서는 문자 인코딩을 UTF8로 설정하는 것이 좋습니다. 데이터베이스 구성 파일을 열고 [client], [mysql], [mysqld] 아래에 각각 다음 내용을 추가합니다.
#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
데이터베이스 재시작
[root@test ~]# systemctl restart mysqld
생성된 라이브러리와 테이블 다시 작성
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)
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/ | +--------------------------+----------------------------+
위 내용은 MySQL에서 중국어 문자 왜곡 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!