前言
MySQL由于开源免费等特性被广泛使用。开源,意味着功能强大,也意味着管理混乱。了解MySQL的存在的小科普,对避免日后踩坑还是很有帮助的。开一篇文章积累日常看到关于MySQL的小科普。
utf8mb4
UTF-8是文本处理中常见的字符编码方式,是一种可变长的字符编码。随着字符数量的增加,UTF-8的最长长度也在变化,一开始是1~4个字节,修正后的UTF-8中,最长可以达到6个字节。
在MySQL中,“utf8”编码只支持每个字符最多3个字节。
在UTF-8编码中,一般数字、英文、符号等占1个字节,汉字占3个字节,表情(emoji)符号占4个字节。问题来了,我们误以为MySQL中的utf8就是UTF-8,但是这时存储emoji等4字节符号就会因为长度不够的问题出现异常。MySQL的开发者的初衷可能是为了减少数据库的空间占用,但是现在,4字节以后的字符被大面积使用,问题就爆发了。
utf8mb4(utf8 max 4 bytes),MySQL给出了亡羊补牢的解决方案。utf8mb4最多可以支持4个字节的字符,这起码解决了4字节UTF-8字符无法存进数据库的问题。但是,很明显,问题依然没有从根本上解决。