MySQL 运维实战课
张新铭(俊达)
云掣科技资深数据库专家,前淘宝网、支付宝数据库专家
623 人已学习
新⼈⾸单¥59
MySQL 运维实战课
15
15
1.0x
00:00/00:00
登录|注册

07|乱码是怎么产生的,以及如何避免?

你好,我是俊达。
不知道你在平时工作中是否遇到过乱码问题?我最早遇到的乱码问题还是刚开始学 C 语言编程时,有时候在 Console 上会输出“烫烫烫”这样的信息。在使用 MySQL 时,也遇到过各种乱码,乱码可能会以不同的形式出现。
那么在这一讲中,我们就来分析 MySQL 中出现乱码的几种不同情况,以及乱码产生的底层原因,从而掌握处理和避免乱码问题的方法。

编码与解码

平时我们会使用文字和符号来进行交流,比如“中文符号”就是一个有明确含义的词组。我们也知道计算机底层是使用二进制来存储和传输数据,那么计算机如何以二进制的形式来表示“中文符号”这个词组呢?这就涉及到字符的编码了。对于中文字符,比较常用的编码方式就包括 GBK、UTF8,当然也包括其他一些编码方式,但我们这里就不过多讨论了,因为底层原理是一样的。
“中文符号”使用 GBK 编码后,是这个样子的。
而使用 UTF8 编码时,是这个样子的。
我们可以在网上找到 GBK 的编码表,也可以找到 Unicode 的表,而 Unicode 可以用明确的算法转换成 UTF8 编码。这里我们提供一个简便的方法,使用 Python(python2) 来获取字符的编码。
### GBK
>>> u"中文符号".encode('gbk')
'\xd6\xd0\xce\xc4\xb7\xfb\xba\xc5'
### UTF8
>>> u"中文符号".encode('utf8')
'\xe4\xb8\xad\xe6\x96\x87\xe7\xac\xa6\xe5\x8f\xb7'
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 乱码产生的原因主要是由于字符集编码和解码不匹配导致的,程序无法准确判断数据的编码方式,因此容易出现乱码问题。 2. MySQL中的字符集变量和表、列的字符集属性的设置对于避免乱码问题至关重要,需要正确设置这些变量和属性以确保数据的正确编码和解码。 3. 通过正确设置字符集变量和表、列的字符集属性,可以有效避免MySQL中出现乱码问题,确保数据的正确编码和解码。 4. 在进行数据迁移、数据导入导出后,需要重点检查是否有乱码产生,字符集设置不对可能会导致乱码问题。 5. 在执行DDL时,如果终端环境和数据库字符集参数设置不一致,并且DDL中使用了中文符号,也可能会产生乱码。 6. 在使用mysqldump备份时,建议统一都指定 utf8mb4 字符集。 7. 根据需要存储和处理的文本类型决定使用哪种字符集,一般如果要处理中文,可以选择GBK或UTF8字符集。 8. 客户端需要设置正确的字符集,要和程序中数据的实际编码保持一致。 9. MySQL中,建议使用 utf8mb4 字符集,因为MySQL中UTF8字符集实际上是 utf8mb3,无法存储4字节的Unicode编码,如emoji字符。 10. 数据库中,建议选择一种统一的字符编码,尽量避免使用多种不同的字符集。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)