MySQLの中国語文字化け問題を解決する方法

coldplay.xixi
リリース: 2020-07-06 16:20:27
転載
2667 人が閲覧しました

MySQLの中国語文字化け問題を解決する方法

1. MySQL が表示されます。中国語の文字化けの理由
MySQL データベースを使用すると、文字化けの問題がよく発生します。次のコードを参照してください。

    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 クライアントが使用する文字コード
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/ |
    +--------------------------+----------------------------+
ログイン後にコピー
ログイン後にコピー

#1. MySQL で中国語の文字化けが発生する理由

MySQL データベースを使用する場合, 文字化けによく遭遇します 質問ですが、以下のコードを見てください。

    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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!