企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
字符集与排序规则 utf8_general_ci编码每个字符需要3个字节,所以varchar(20)使用61个字节,varchar(255)使用766个字节; utf8mb4_general_ci编码每个字符需要4个字节,所以varchar(20)使用81个字节,varchar(255)使用1021个字节; ``` varchar长度设置 nd5字段内容为“7e9117c8849626ebdc78525288cc3b45” 则md5字段长度可以设置为32(以实际为准,与字节算法无关) ``` 以下部分转自 http://blog.csdn.net/qqduxingzhe/article/details/65444893; utf8 跟utf8mb4具有相同的储存特性:相同的代码值,相同的编码,相同的长度。 不过utf8mb4扩展到一个字符最多可有4位元,所以能支持更多的位元集。 utf8mb4兼容utf8,且比utf8能表示更多的字串,将编码改为utf8mb4外不需要做其他转换。 为了要跟国际接轨,原本的utf8编码在储存某些国家的文字(或是罕见字)已经不敷使用,  因此在mysql 5.5.3版以上,可以使用4-Byte UTF-8 Unicode的编码方式。 utf8跟utf8mb4具有相同的储存特性:相同的代码值,相同的编码,相同的长度。 不过utf8mb4扩展到一个字符最多可有4位元,所以能支持更多的位元集。 utf8mb4兼容utf8,且比utf8能表示更多的字串,将编码改为utf8mb4外不需要做其他转换。 utf8已经能够存下大部分的中文字,那为什么还要改成使用utf8mb4呢? 原因为mysql支持的utf8编码最大长度为3位元(Unicode字符是0xffff)称之Unicode的基本多文种平面(BMP),但如果遇到4位元的宽字串就会插入异常了,也就是任何不在基本多文本平面的Unicode字串,都无法使用Mysql的utf8字串集储存。 如果要开发讨论区或是大型跨国网页程式,为了拥有更加的文字兼容性,就可以使用utf8mb4。 然而,在CHAR类型数据,utf8mb4会比utf8多消耗一些空间,故Mysql官方指出,使用VARCHAR替代CHAR。 最后,到底要用utf8mb4_general_ci还是utf8mb4_unicode_ci呢? 建议使用:utf8mb4_unicode_ci utf8mb4_unicode_ci使用标准的Unicode Collat​​ion Algorithm(UCA),  utf8mb4_general_ci比utf8mb4_unicode_ci速度要来得快,  但是utf8mb4_unicode_ci比utf8mb4_general_ci要来得精确。  utf8mb4对应的排序字符集有utf8mb4_unicode_ci、utf8mb4_general_ci. utf8mb4_unicode_ci和utf8mb4_general_ci的对比: 准确性: utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序 utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。 但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。 性能 utf8mb4_general_ci在比较和排序的时候更快 utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。 但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。