MySQL导入数据库中文乱码问题解决
- 首发:2022-02-23 20:55:58
- 教程
- 3089
温馨提示:如果需要迁移大量数据,一定要使用专业工具并请专业的公司提供技术支持,同时做好迁移审计工作。以下方案仅供参考。
MySQL导入数据库导致中文乱码属于常见问题。一般用客户端工具导入不容易出现此问题,但是有点大又不是特别大(10G-100G)的数据通过命令导入就比较容易遇到这个问题。而网上的答案几乎都是经验性的结论,答主大多知其然不知其所以然。
注:命令导入,即source xxx.sql
。
# 查看当前数据库状态
mysql> status
--------------
mysql Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 66
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.28 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 4 hours 15 min 9 sec
通过status
可以查看当前数据库状态,其中有4行characterset
相关内容(与SHOW VARIABLES LIKE 'character_set_%';
得到的结果一致)。
这里标识了服务器端的字符集、数据库字符集,还有客户端的字符集。
要避免乱码的关键就在于客户端和服务器端的字符集一致。
通过mysql -u root --default-character-set=utf8 -p
连接到数据库命令行,再次尝试status
命令。
mysql> status;
--------------
mysql Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 67
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.28 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb3
Conn. characterset: utf8mb3
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 4 hours 20 min 23 sec
此时Client characterset
与Conn. characterset
均发生变化。
也就是说,如果遇到乱码,先检查客户端连接工具和服务器端编码是否一致,导出的SQL文件编码是否是utf8
,修改一致后再次尝试source xxx.sql
即可。
附一个简单的MySQL测试环境Docker命令:
docker run -v /home/ubuntu/mysql/:/var/lib/mysql -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root密码 --restart always --privileged=true --cap-add=sys_nice --name mysql-saas -itd mysql:8.0.28 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
(其中包含中文常见的编码设置方法,以及对容器放开CPU权限的设置)
导入较大的SQL文件常见Got a packet bigger than 'max_allowed_packet' bytes
异常,解决方法:
SET GLOBAL max_allowed_packet=15242880000;
除特别注明外,本站所有文章均为原创。原创文章均已备案且受著作权保护,未经作者书面授权,请勿转载。
打赏
交流区
暂无内容
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢