Discuz!X3.5 MySQL InnoDB引擎max key length is 767bytes长度问题
允许索引字段前缀的字节限制为 767 bytes,且:
- 当字符集为 utf8mb4 时,一个字符对应 4 bytes;
- 当字符集为 utf8 时,一个字符对应 3 bytes;
所以对于(一)中的问题:
字符集为 utf8mb4, 所以可申请索引的 varchar 长度为:767/4 ≈ 191;
而字符集为 utf8 时,可设置的创建索引 varchar 长度为: 767/3 ≈ 255
在 5.6.3 之后的版本,字节限制提高到了 3072 bytes.
从(二)可得:
字符集为 utf8mb4 时,限制 varchar 字符为:3072/4 = 768;
字符集为 utf8 时,限制 varchar 字符为:3072/3 = 1024;
因此字符集为 utf8mb4 时,将 name 字段索引前缀长度控制在 768 以内即可成功创建索引。