我想知道MySQL VARCHAR类型的最大大小是多少。
我读到最大大小受到行大小的限制,行大小约为65k。我尝试将字段设置为varchar(20000),但它显示该字段太大。
我可以将其设置为varchar(10000)。我可以设置的最大值是多少?
发布于 2012-11-22 14:22:07
请记住,MySQL有一个最大行大小限制
MySQL表的内部表示的最大行大小限制为65,535字节,不包括BLOB和TEXT类型。BLOB和TEXT列仅对行大小限制贡献9到12个字节,因为它们的内容与行的其余部分分开存储。阅读有关Limits on Table Column Count and Row Size.的更多信息
单个列可以占用的最大大小在MySQL 5.0.3之前和之后是不同的
VARCHAR列中的
值是可变长度的字符串。在MySQL 5.0.3之前,长度可以指定为0到255之间的值;在5.0.3和更高版本中,长度可以指定为0到65,535之间的值。在MySQL 5.0.3和更高版本中,VARCHAR5.0.3和更高版本的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。
但是,请注意,如果使用多字节字符集(如utf8或utf8mb4 ),则限制会更低。
使用 TEXT 类型以克服行大小限制。
有四种文本类型: TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。它们对应于四种斑点类型,并且具有相同的最大长度和存储要求。
有关BLOB和文本类型的详细信息,请参阅
MySQLv8.0 https://dev.mysql.com/doc/refman/8.0/en/blob.html
的
甚至更多
请查看有关Data Type Storage Requirements的更多详细信息,它处理所有数据类型的存储需求。
发布于 2012-11-22 14:22:55
根据the online docs,有64K的行限制,您可以使用以下命令计算行大小:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)您需要记住,列长度不是它们大小的一对一映射。例如,对于10个字符中的每个字符,CHAR(10) CHARACTER SET utf8需要3个字节,因为特定的编码必须考虑到utf8的每个字符3个字节的属性(即MySQL's utf8 encoding,而不是“真正的”UTF-8,后者最多可以有4个字节)。
但是,如果行大小接近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)您仍然存在字节/字符不匹配的问题(因此,(16M-1)/3 = 5,592,405,一个MEDIUMTEXT utf8列只能存储大约50万个字符),但是它仍然大大扩展了您的范围。
发布于 2013-10-30 22:57:46
变量字符的最大长度以MySQL中的最大行大小为准,最大行大小为64KB (不包括BLOB):
然而,VARCHAR(65535)请注意,如果使用多字节字符集,则限制会更低:
(21844)字符集VARCHAR
https://stackoverflow.com/questions/13506832
复制相似问题