ホームページ >データベース >mysql チュートリアル >mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法

mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法

藏色散人
藏色散人オリジナル
2020-10-28 09:58:195283ブラウズ

mysql インポート ファイルの中国語文字化けの解決策: まずデータベースを作成してエンコーディングを指定し、データベース ファイルをインポートする前にエンコーディング セット名 utf8 を指定します。

mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法

推奨: 「mysql ビデオ チュートリアル

昨日の質問の続きで、データベースを構成した後、クエリ テーブルを作成します。見つかりました 漢字が文字化けしてしまい、ネット上で色々な方法を試しましたが解決できませんでした。
インポートした SQL ファイルに問題があるようなので、逆に考えてコマンドでデータベースを作成し、データを追加してエクスポートして様子を見てみましょう。
テーブルにデータを挿入するときに、エラーが報告されました:
エラー 1366 (HY000): 不正な文字列値: 列 'bookname' の '\xE6\xB5\x8B\xE8\xAF\x95'行 1

mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法



mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法



これは奇妙です。テーブル構造を確認してください:
show create table book;



mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法

mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法


#見たことのないエンコード形式を見たlatin1 を見て、思い切って変更し、コマンドを渡します:
alter table book default Character set utf8;変更後、更新された結果が表示されます。テーブルのエンコーディングは次のようになります。変更されましたが、まだ「What that hell?」が表示され、フィールドが文字化けしています latin1:



mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法

mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法


##思い切って変更し、次のコマンドを渡します:

alter table bookchange bookname bookname varchar(32)character set utf8 ;
修正完了 もう見ずに直接データを挿入してみました:

insert into book
(id,bookname,size,price)
values
(1,"测试",2,3)
;

挿入は成功しました。データがまだ中国語で文字化けしていないか確認したところ、



mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法 次に、次のステップに進み、SQL ファイルをエクスポートします。 mysql の bin ディレクトリに入り、コマンドでエクスポートを開始します。このプロセスではパスワードの入力が必要です

E:\mysql-5.7.28-winx64\bin>mysqldump -u root -p test > test.sql
Enter password: *******

エクスポートされたファイルのテーブル エンコード形式は utf8 です。以前インポートしたファイルと比較すると、問題ありません。見た。

それでは、先ほどのファイルインポートの処理ですが、データベース作成の問題に加えて、先ほどインポートしたmydb.sqlのmydbデータベース構造を確認してみると、確かに間違っています:

mysql> use mydb;
Database changed
mysql> show variables like 'character_set_database';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
1 row in set, 1 warning (0.00 sec)

なので、それを変更しました: alert database mydbcharacter set utf8;

次に、テーブルのエンコーディングをチェックして、何か奇妙なものを見つけました:

mysql> show create table sp_user_cart;
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sp_user_cart | CREATE TABLE `sp_user_cart` (
  `cart_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `user_id` int(11) unsigned NOT NULL COMMENT '瀛﹀憳id',
  `cart_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '璐?墿杞﹁?鎯呬俊鎭?紝浜岀淮鏁扮粍搴忓垪鍖栦俊鎭',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `delete_time` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`cart_id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8

utf8mb4_unicode_ci どうしてこれができたのでしょうか...その後、エンコードを変更してクエリを実行しましたが、「いいえ、以前データベースを作成したときにエンコードの設定を忘れていたことを思い出しました。インポートされたものが元々文字化けしていたか、my.ini の設定が間違っていました。使用してみてください。」正しいプロセスを最初からやり直します。


最初にデータベースのエンコード設定を確認してください:

「character%」などの変数を表示します;

非常にわかりにくいと思いました:

mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | gbk                                    |
| character_set_connection | gbk                                    |
| character_set_database   | latin1                                 |
| character_set_filesystem | binary                                 |
| character_set_results    | gbk                                    |
| character_set_server     | latin1                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | D:\mysql-5.7.29-winx64\share\charsets\ |
+--------------------------+----------------------------------------+

変更を開始しました。一連の set

setcharacter_set_client = utf8;
結果を取得

+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | utf8                                   |
| character_set_connection | utf8                                   |
| character_set_database   | utf8                                   |
| character_set_filesystem | utf8                                   |
| character_set_results    | utf8                                   |
| character_set_server     | utf8                                   |
| character_set_system     | utf8                                   |
| character_sets_dir       | D:\mysql-5.7.29-winx64\share\charsets\ |
+--------------------------+----------------------------------------+

创建数据库并制定编码:CREATE DATABASE test2 CHARACTER SET utf8 COLLATE utf8_general_ci;
使用:use test2
在导入数据库文件之前,制定编码set names utf8;
导入:source F:xxxx\xxxx\mydb.sql;
不算漫长的等待之后,查询,不乱码了

mysql> select * from sp_role;
+---------+---------------+---------------------------------------------------------------------------------------------
------------------------------------------------------+-----------------------------------------------------------------
------------------------+--------------------+
| role_id | role_name     | ps_ids
                                                      | ps_ca
                        | role_desc          |
+---------+---------------+---------------------------------------------------------------------------------------------
------------------------------------------------------+-----------------------------------------------------------------
------------------------+--------------------+
|      30 | 主管          | 101,0,104,116,115,142,143,144,121,122,123,149,102,107,109,103,111,129,130,134,135,138,139,14
0,141,112,147,125,110,131,132,133,136,137,145,146,148 | Goods-index,Goods-tianjia,Category-index,Order-showlist,Brand-in
dex                     | 技术负责人         |
|      31 | 测试角色      | 101,0,104,105,116,117,115,142,143,144,121,122,123,149,103,111,129,134,138,112,147
                                                      | Goods-showlist,Goods-tianjia,Category-showlist,Order-showlist,Or
der-dayin,Order-tianjia | 测试角色描述       |
|      34 | 测试角色2     | 0,105,116,142,143,122
                                                      | NULL
                        | 测试描述12         |
|      39 | 大发送到      | 101,0,104,105,116
                                                      | NULL
                        | 阿斯蒂芬           |
|      40 | test          | 102,0,107,109,154,155,145,146,148
                                                      | NULL

实战项目可以继续进行,遂生法喜。

以上がmysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。