>  기사  >  데이터 베이스  >  MySQL에서 중국어 문자 왜곡 문제를 해결하는 방법

MySQL에서 중국어 문자 왜곡 문제를 해결하는 방법

coldplay.xixi
coldplay.xixi앞으로
2020-07-06 16:20:112719검색

ㅋㅋㅋ

    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 비디오 튜토리얼

분명히 중국어를 삽입할 때 오류가 발생하는 이유는 무엇입니까?

    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 클라이언트에서 사용하는 문자 인코딩 MySQL에서 중국어 문자 왜곡 문제를 해결하는 방법character_set_connection 데이터베이스 링크에서 사용하는 인코딩 character_set_database 데이터베이스에서 사용하는 문자 인코딩

문자 인코딩이 서버 및 데이터베이스의 인코딩과 통일되지 않은 것으로 나타났습니다.

2. MySQL의 중국어 문자 깨짐 해결 방법

방법 1: 이름 설정

    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로 설정하면 왜곡된 문제를 일시적으로 해결할 수 있습니다.


방법 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> 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의 중국어 문자 깨짐 해결 방법

방법 1: 이름 설정

    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로 설정하면 왜곡된 문제를 일시적으로 해결할 수 있습니다.

방법 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제