根据documentation(强调我的):
TEXT [(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
TEXT列,最大长度为65,535(216 - 1)个字符。 如果值包含多字节字符,则有效最大长度会减少。每个TEXT值使用2字节长度前缀存储,该前缀表示值中的字节数。
说TEXT
列可以存储65535 字节会更准确吗? TEXT
列中多字节字符的具体影响是什么?
这是我困惑的根源:
在MySQL 5中,CHAR
和VARCHAR
字段已更改,因此它们会计算字符而非字节(例如,您可以“你好,世界!“进入VARCHAR(6)
)。 TEXT
字段是否得到相同的处理,还是仍然计算字节数?
答案 0 :(得分:5)
我的知识:utf-8中的一个字符最大32位大(4字节)。
编辑:utf8在mysql中只有最大3字节大。 utf8mb4最大4字节。
所以最坏的情况只有最大的字符:
utf8: 65535 / 3 = 21845
utf8mb4: 65535 / 4 = 16383,75 =~ 16383
https://stackoverflow.com/a/9533324/2575671
编辑2:
我用10.1.21-MariaDB测试了本地。测试字符utf-8:
1-Byte:a
2-Byte:ö
3-Byte:好
4字节:
utf8: 21845 @3-Byte (好)
utf8mb4: 16386 @4-Byte ()
<强>截图:强>