我正在使用MySQL构建一个应用程序,其中中文名称需要存储在数据库中。我正在尝试决定是否使用基本utf8
编码(仅适用于基本多语言平面,并且在UTF-8编码中每个字符最多存储3个字节),或者如果我需要使用utf8mb4
编码,允许编码/存储更高层的字符。
Unicode基本多语言平面(BMP)是否足以存储所有中文专有名称?
答案 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字符,
utf8
和utf8mb4
具有相同的存储特征:相同的代码值,相同的编码,相同的长度。- 对于补充字符,
utf8
根本不能存储字符,而utf8mb4
需要四个字节来存储它。由于utf8
根本无法存储字符,因此在utf8
列中没有补充字符,并且在从旧版本的MySQL升级utf8
数据时无需担心转换字符或丢失数据。 / LI>
因此,我的原始问题是错误的:只要您使用的编码实际上支持编码所有Unicode代码点,编码中文名称的每个字符的最大字节数就无关紧要。