ホームページ >データベース >mysql チュートリアル >mysqlインポートファイルに中国語の文字化けが含まれている場合の対処方法
mysql インポート ファイルの中国語文字化けの解決策: まずデータベースを作成してエンコーディングを指定し、データベース ファイルをインポートする前にエンコーディング セット名 utf8 を指定します。
推奨: 「mysql ビデオ チュートリアル 」
昨日の質問の続きで、データベースを構成した後、クエリ テーブルを作成します。見つかりました 漢字が文字化けしてしまい、ネット上で色々な方法を試しましたが解決できませんでした。
インポートした SQL ファイルに問題があるようなので、逆に考えてコマンドでデータベースを作成し、データを追加してエクスポートして様子を見てみましょう。
テーブルにデータを挿入するときに、エラーが報告されました: エラー 1366 (HY000): 不正な文字列値: 列 'bookname' の '\xE6\xB5\x8B\xE8\xAF\x95'行 1
これは奇妙です。テーブル構造を確認してください: show create table book;
#見たことのないエンコード形式を見たlatin1 を見て、思い切って変更し、コマンドを渡します:
alter table book default Character set utf8;変更後、更新された結果が表示されます。テーブルのエンコーディングは次のようになります。変更されましたが、まだ「What that hell?」が表示され、フィールドが文字化けしています latin1:
alter table bookchange bookname bookname varchar(32)character set utf8 ;修正完了 もう見ずに直接データを挿入してみました:
insert into book (id,bookname,size,price) values (1,"测试",2,3) ;
次に、次のステップに進み、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)
次に、テーブルのエンコーディングをチェックして、何か奇妙なものを見つけました:
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
最初にデータベースのエンコード設定を確認してください:
非常にわかりにくいと思いました:
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\ | +--------------------------+----------------------------------------+
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 サイトの他の関連記事を参照してください。