3 回答
TA贡献2021条经验 获得超8个赞
根据在线文档,有64K行限制,您可以使用以下方法计算行大小:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
您需要记住,列长度不是它们大小的一对一映射。例如,CHAR(10) CHARACTER SET utf8十个字符中的每一个都需要三个字节,因为特定的编码必须考虑每个字符的三字节属性utf8(即MySQL的utf8编码而不是“真正的”UTF-8,最多可以有四个字节)。
但是,如果行大小接近64K,则可能需要检查数据库的架构。这是一个罕见的表,需要在正确设置(3NF)数据库中这么宽 - 这是可能的,只是不常见。
如果您想使用更多,可以使用BLOB或TEXT类型。这些不计入行的64K限制(除了小的管理占用空间),但您需要了解其使用的其他问题,例如无法使用超过一定数量的整个文本块进行排序字符(虽然可以向上配置),强制临时表在磁盘上而不是在内存中,或者必须配置客户端和服务器通信缓冲区以有效地处理大小。
允许的尺寸为:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
你仍然有字节/字符不匹配(这样一MEDIUMTEXT utf8列可以“只”存储大约五十万个字符,(16M-1)/3 = 5,592,405)但它仍然会大大扩展你的范围。
TA贡献1815条经验 获得超6个赞
varchar的最大长度取决于MySQL中的最大行大小,即64KB(不包括BLOB):
VARCHAR(65535)但是,请注意,如果使用多字节字符集,则限制较低:
VARCHAR(21844)CHARACTER SET utf8
添加回答
举报