惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
量子位
罗磊的独立博客
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
小众软件
小众软件
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
大猫的无限游戏
大猫的无限游戏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
Simon Willison's Weblog
Simon Willison's Weblog
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园_首页
博客园 - 叶小钗
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
T
Tailwind CSS Blog
IT之家
IT之家
博客园 - 聂微东
Spread Privacy
Spread Privacy
V2EX - 技术
V2EX - 技术
S
Security Affairs
宝玉的分享
宝玉的分享
V
V2EX
C
Cisco Blogs
博客园 - Franky
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
S
Securelist
J
Java Code Geeks
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
Last Week in AI
Last Week in AI
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
WordPress大学
WordPress大学
W
WeLiveSecurity
T
Threatpost
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志

轶哥博客

blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog
blog
2022-02-23 · via 轶哥博客

温馨提示:如果需要迁移大量数据,一定要使用专业工具并请专业的公司提供技术支持,同时做好迁移审计工作。以下方案仅供参考。

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 charactersetConn. 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;