中文名称和Unicode基本多语言平面(BMP)

时间:2017-08-25 10:43:54

标签: mysql unicode encoding utf-8

我正在使用MySQL构建一个应用程序,其中中文名称需要存储在数据库中。我正在尝试决定是否使用基本utf8编码(仅适用于基本多语言平面,并且在UTF-8编码中每个字符最多存储3个字节),或者如果我需要使用utf8mb4编码,允许编码/存储更高层的字符。

Unicode基本多语言平面(BMP)是否足以存储所有中文专有名称?

2 个答案:

答案 0 :(得分:1)

MySQL CHARACTER SET utf8仅处理3字节UTF-8代码(BMP)。相反,使用CHARACTER SET utf8mb4,它处理所有4字节代码。是的,包括所有当前为中文,表情符号等定义的Unicode。

如果可行,请使用5.7版。

答案 1 :(得分:0)

TL; DR 没关系,坚持使用utf8mb4编码,特别是对于新的应用程序。

长篇答案:两种编码的主要区别在于,MySQL长期支持的utf8支持长度最多为三个字节的UTF8编码字符。从5.5.3开始,如@ rick-james所述,一种新编码,utf8mb4放宽了这一限制,否则没有任何缺点。

根据MySQL documentation,较新的utf8mb4编码解除了这个任意三字符限制,并且几乎没有任何缺点:

  
      
  • 对于BMP字符,utf8utf8mb4具有相同的存储特征:相同的代码值,相同的编码,相同的长度。
  •   
  • 对于补充字符,utf8根本不能存储字符,而utf8mb4需要四个字节来存储它。由于utf8根本无法存储字符,因此在utf8列中没有补充字符,并且在从旧版本的MySQL升级utf8数据时无需担心转换字符或丢失数据。 / LI>   

因此,我的原始问题是错误的:只要您使用的编码实际上支持编码所有Unicode代码点,编码中文名称​​的每个字符的最大字节数就无关紧要