有一个段子,我每次看了都头皮发麻,这个段子是:
手持两把锟斤拷,口中疾呼烫烫烫,脚踏千朵屯屯屯,笑看万物锘锘锘
我相信凡是和我有一样感觉的应该都知道这是啥,所以为了避免这个问题,我们工作的建议就是,所有的地方都设置成:UTF-8,确实我们这样工作了很多年,不知道哪一年 emoji 突然火了,于是在上家公司做论坛的时候,有一个小伙伴遇到了类似于下面的一个小问题(我找不到原报错日志了):
Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1
当时问我,我也不知道原因,然后经过一番搜索之后,发现原来是 MySQL 存储 emoji 时出错了,存储 emoji 的时候,不应该用 utf8,而是用 utf8mb4。
随着移动互联网的到来,emoji 的应用越来越广泛,本以为这个问题大家都知道了,所以就没有深究过,想着自己记着就行了,但是不知道为什么最近这个问题突然火了,原来不是所有人都知道这个问题,甚至有人说,在做微信开发的时候,天知道微信用户会取什么昵称,所以不得已把用户的昵称都 base64 编码一下,展示的时候再解码,我只能表示:厉害,人民群众的智慧是无穷的。
其实产生这个问题的原因也很简单,据说是 MySQL 的一个 bug:
1. MySQL 的 utf8mb4 是真正的utf8。
2. MySQL 的 utf8 是一种专属的编码,它能够编码的 Unicode 字符并不多。
关于什么是编码,我相信大家应该都知道了,如果不知道请自行搜索(当年曾经给一个计算机在读博的学姐科普什么是 GBK、GB2312、GB18030、UTF-8、BIG5、ISO-8859-1 等等,也是心累),至于为什么 MySQL 的 utf8 不是真正的 utf8,这是一个历史原因,我搜索的资料是:MySQL 从 4.1 版本开始支持 UTF-8,也就是 2003 年,而今天使用的 UTF-8 标准(RFC 3629)是随后才出现的。
所以现在我们看到的很多 MySQL(或者 MySQL 的分支:MariaDB)资料依然在建议,MySQL 的编码使用 utf8,这在绝大多数的情况下,确实也没有问题,但确实是错误的,最好的选择是,选用真正的 utf8,也就是:utf8mb4。对于已经选用 utf8 需要改用 utf8mb4 的项目,这有一个指南:
https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4
另,我们有时候会看到:UTF-8、utf-8 和 utf8 三种写法,其实标准的写法应该是:UTF-8,但因为 Windows 不区分大小写,所以有时候有人会写成:utf-8,也会被识别,但这是不标准的;至于 utf8,则是因为:MySQL 的命令模式中只能使用 utf8,不能使用 utf-8,所以又是 MySQL 的一个坑。所以我很想说的是,什么是经验?经验就是踩过了无数的坑,坑连成片,也就没有坑了,这就是经验,这就是老 程序员 存在的意义。
参考资料:
https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434
这是一个老外两年前写的文章,不知道为啥好像突然被国人发现了新大陆是的,具体大家也可以看看这篇文章,写的很详细。
全文完,如果本文对您有所帮助,请花 1 秒钟帮忙点击一下广告,谢谢。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接: https://www.bridgeli.cn/archives/565
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
以上所述就是小编给大家介绍的《关于 MySQL 中 utf8 的问题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- acme.sh 续期问题(路径问题)
- 缓存的一些问题和一些加密算法【缓存问题】
- 如何把设计问题转化为数学问题(方法论)
- 推荐系统中的冷启动问题和探索利用问题
- GraphQL 教程(六)—— N+1问题和缓存等问题
- Golang 并发问题(四)之单核上的并发问题
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learn Python the Hard Way
Zed Shaw / Example Product Manufacturer / 2011
This is a very beginner book for people who want to learn to code. If you can already code then the book will probably drive you insane. It's intended for people who have no coding chops to build up t......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!