Mysql中的编码“utf-8”和”utf8mb4″的区别与使用
Posted 三晋一枝花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql中的编码“utf-8”和”utf8mb4″的区别与使用相关的知识,希望对你有一定的参考价值。
本文转载自:http://791202.com/2019/12/15/db/196/
如果要存互联网emoji表情,例如昵称,聊天,就需要utf8mb4,而不是utf-8。
mysql数据库的 “utf8”并不是真正概念里的 UTF-8。
首先确实utf8需要超过3个字节的长度。其次目前可见字符集都只需要3个字节,包含了所有字符。目前问题出在unicode6系列编码上,它们需要4个字节,这部分就是有名的emoji。所以,你只要不是特种编码还是unicode,且不存emoji,保证不出问题。
MySQL中的“utf8”编码只支持最大3字节每字符。真正的大家正在使用的UTF-8编码是应该能支持4字节每个字符。
MySQL的开发者没有修复这个bug。他们在2010年增加了一个变通的方法:一个新的字符集“utf8mb4”。当然,他们并没有对外公布(可能因为这个bug有点尴尬)。现在很多指南推荐用户使用“utf8”其实都错了。
简单的说:
MySQL中的 “utf8mb4” 才是 真正意义上的“UTF-8”。
MySQL的“utf8”是个“特殊的字符编码”。这种编码很多Unicode字符保存不了。
强烈建议MySQL和MariaDB用户使用“utf8mb4”而不是“utf8”。
编码是什么?什么是UTF-8?
Joel on Software上有一遍我最喜欢的介绍,我精简描述如下:
计算机使用0和1存储文字。比如第一段第一个字符存储为“01000011”表示“C”,计算机通过以下两个步骤选择用“C”表示:
计算机读取到“01000011”后计算出这是数字67。
计算机通过查找Unicode字符集来确认67代表的“C”。
同样的事情发生在我打字输入C的时候。
计算机通过Unicode字符集将“C” 映射为67。
计算机把67编码为“01000011”发送给web服务器。
几乎所有的程序和互联网应用使用Unicode字符集。
Unicode字符集里有超过100万个字符(“C” 和 “” 是两种不同的字符。)。UTF-32是最简单的编码方式,它在表示每个字符的时候使用32个bits。这样编码简单,但是并不实用,明显浪费了太多的空间。
UTF-8相比UTF-32更加节约空间。在UTF-8中,像“C”这样的字符占用8bits,“”这样的占用32 bits。其他字符占用16或者24 bits。如本篇这样的文章用UTF-8存储比用UTF-32节省4倍左右的空间。更小的空间占用也意味着加载速度会快上4倍。
而MySQL中的 “utf8”字符集则和其他应用行为不一样。比如根本没法表示“”。
以上是关于Mysql中的编码“utf-8”和”utf8mb4″的区别与使用的主要内容,如果未能解决你的问题,请参考以下文章
utf8mb4 字符集(4字节 UTF-8 Unicode 编码)