utf8mb4 是定长存储吗?
UTF8MB4 存储特性分析
UTF8MB4 不是定长存储,它是一种变长编码。
存储特性详解
变长编码特性:
- UTF8MB4 是 MySQL 中完全实现的 UTF-8 编码
- 每个字符占用 1-4 个字节不等
- 存储空间取决于实际字符
字节分配情况:
- ASCII 字符(0-127):1字节
- 大多数拉丁字母、希腊字母等:2字节
- 基本多文种平面(BMP)中的汉字等:3字节
- 辅助平面字符(如emoji):4字节
与定长编码的区别:
- 定长编码(如utf32)每个字符固定占用4字节
- 变长编码更节省空间,但处理稍复杂
MySQL中的实现:
- VARCHAR(n) 表示最多存储n个字符,实际占用空间取决于内容
- CHAR(n) 会填充空格到指定长度,但仍按变长编码存储字符本身
性能考虑
虽然变长编码节省空间,但在某些情况下可能影响性能:
- 随机访问不如定长编码高效
- 排序操作可能稍慢
需要根据具体应用场景权衡选择。