MySQL中utf8和utfmb4编码的区别

断鸿 2019年07月13日 87次浏览

[toc]

字符集与字符编码的概念

  • 字符集:字符集定义了文字和二进制的对应关系,为字符分配了唯一的编号,通过这个编号就能找到对应的字符。
  • 字符编码:字符编码规定了如何将文字的编号存储到内存中。

Unicode和utf-8、utf-16、utf-32

Unicode是一个独立的字符集,它并不是和编码绑定的。而utf-8、utf-16、utf-32就是Unicode字符集可使用的编码。

  • UFT-8:一种变长的编码方案,使用 1~6 个字节来存储;
  • UFT-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
  • UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。

MySQL中的utf8和utfmb4

  • MySQL中的utf8编码最多只支持3个字节,所以对于Unicode字符集中编号比较靠后的字符(如emoji表情😊)是无法以utf8编码存储到MySQL中的。

  • utfmb4才是MySQL中真正意义上的“UTF-8”编码,而MySQL 的“utf8”只能算是一种“专属的编码”,它能够编码的 Unicode 字符并不多。

  • 所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”