插件窝 干货文章 utf8mb4 是定长存储吗?

utf8mb4 是定长存储吗?

编码 字节 字符 定长 1000    来源:    2025-03-30

UTF8MB4 存储特性分析

UTF8MB4 不是定长存储,它是一种变长编码。

存储特性详解

  1. 变长编码特性

    • UTF8MB4 是 MySQL 中完全实现的 UTF-8 编码
    • 每个字符占用 1-4 个字节不等
    • 存储空间取决于实际字符
  2. 字节分配情况:

    • ASCII 字符(0-127):1字节
    • 大多数拉丁字母、希腊字母等:2字节
    • 基本多文种平面(BMP)中的汉字等:3字节
    • 辅助平面字符(如emoji):4字节
  3. 与定长编码的区别:

    • 定长编码(如utf32)每个字符固定占用4字节
    • 变长编码更节省空间,但处理稍复杂
  4. MySQL中的实现:

    • VARCHAR(n) 表示最多存储n个字符,实际占用空间取决于内容
    • CHAR(n) 会填充空格到指定长度,但仍按变长编码存储字符本身

性能考虑

虽然变长编码节省空间,但在某些情况下可能影响性能: - 随机访问不如定长编码高效 - 排序操作可能稍慢

需要根据具体应用场景权衡选择。