如何解决mysql导入文件中文乱码的问题

54次阅读
没有评论

共计 5300 个字符,预计需要花费 14 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下如何解决 mysql 导入文件中文乱码的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

mysql 导入文件中文乱码的解决办法:首先创建数据库并制定编码;然后在导入数据库文件之前,制定编码 set names utf8 即可。

继续昨天的问题,数据库配置好后,查询表发现中文乱码了,看了网上的几个方法也没解决。
感觉是导入的 sql 文件问题,那么逆向的思考,用命令创建个数据库,添加些数据,然后导出来看看什么情况。
向表内插入数据的时候发现报错:
ERROR 1366 (HY000): Incorrect string value: \xE6\xB5\x8B\xE8\xAF\x95 for column bookname at row 1

如何解决 mysql 导入文件中文乱码的问题

如何解决 mysql 导入文件中文乱码的问题

如何解决 mysql 导入文件中文乱码的问题

如何解决 mysql 导入文件中文乱码的问题

果断再改,通过命令:alter table book change 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 mydb character 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 配置不对,从头开始用正确流程试试吧。

先查看数据库的编码设置:show variables like 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
set character_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 导入文件中文乱码的问题的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计5300字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)