我想知道MySQL VARCHAR类型的最大尺寸是多少。
我读到,最大尺寸受行大小的限制,大约是65K。我试着把字段设置为varchar(20000)
,但它说这太大了。
我可以把它设置为varchar(10000)
。 我可以把它设置成什么确切的最大值?
请记住,MySQL有一个最大行大小的限制。
MySQL表的内部表示有65,535字节的最大行大小限制,不包括BLOB和TEXT类型。BLOB和TEXT列对行的大小限制只贡献了9到12个字节,因为它们的内容是与行的其他部分分开存储的。阅读更多关于 表列数和行大小的限制。
单列所能占据的最大尺寸,在MySQL 5.0.3之前和之后是不同的。
VARCHAR列中的值是可变长度的字符串。在MySQL 5.0.3之前,长度可以被指定为0到255的值,在5.0.3及以后的版本中,长度为0到65,535。在MySQL 5.0.3及以后的版本中,VARCHAR的有效最大长度受最大行大小(65,535字节,在所有列中共享)和使用的字符集的限制。
然而,请注意,如果你使用多字节的字符集,如utf8或utf8mb4,限制会更低。
**使用TEXT
类型以克服行大小的限制。
四个TEXT类型是TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应于四个BLOB类型,具有相同的最大长度和存储要求。
更多关于BLOB和TEXT类型的细节
甚至更多
查看更多关于数据类型存储要求的细节,它涉及所有数据类型的存储要求。
根据[在线文档][1],有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
编码][2],而不是"real"
UTF-8,它最多可以有四个字节)。)
但是,如果你的行大小接近64K,你可能要检查你的数据库的模式。 在一个正确设置的(3NF)数据库中,需要这么宽的表是很少见的--这是有可能的,_只是不太常见。
如果你想使用更多,你可以使用BLOB
或TEXT
类型。
这些不计入64K的行数限制(除了小的管理占用外),但你需要注意使用它们带来的其他问题,比如不能使用超过一定数量的字符的整个文本块进行排序(虽然这可以向上配置),强迫临时表在磁盘上而不是在内存中,或者必须配置客户端和服务器通信缓冲区以有效地处理大小。
允许的大小是:{{15818733}}。
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
列可以存储"只".约50万个字符,(16M-1)/3=5,592,405
),但仍然大大扩展了你的范围。
大约50万个字符,(16M-1)/3 = 5,592,405
)但它仍然大大扩展了你的范围。
[1]: http://dev.mysql.com/doc/refman/5.6/en/column-count-limit.html [2]: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8.html
[来源][1]
varchar的最大长度受MySQL中最大行数的限制。
即64KB(不算BLOBs)。
>.VARCHAR(65535) VARCHAR(65535)然而,请注意,如果你使用的是
多字节字符集。 多字节字符集: > 符号集:>多字节字符集:>>。 VARCHAR(21844) CHARACTER SET utf8字段。
[1]: https://stackoverflow.com/questions/332798/equivalent-of-varcharmax-in-mysql
来自MySQL文档。
在MySQL 5.0.3及以后的版本中,一个VARCHAR的有效最大长度为
受制于最大的行大小(65,535字节,该行由 >.所有列)和使用的字符集。 所有列)和使用的字符集。 例如,utf8字符
每个字符最多需要3个字节,所以一个VARCHAR列,如果是 >.使用utf8字符集可以声明最大为21,844个字符。 使用utf8字符集可以声明最大为21,844个。 字符。
VARCHAR的限制根据使用的charset不同而不同。 使用ASCII码,每个字符使用1个字节。 这意味着你可以存储65,535个字符。 使用utf8将使用每个字符3个字节,导致21,844个字符的限制。 但是,如果你使用的是现代多字节字符集utf8mb4,你应该使用它!它支持表情符号和其他字符。 它支持emojis和其他特殊字符。 它将使用每个字符4个字节。 这将限制每个表的字符数为16,383个。 请注意,其他字段,如INT也将被计算到这些限制。
结论:utf8的最大字符数为16,383。
*utf8最大可容纳21,844**个字符。
utf8mb4最多可容纳16,383个字符。
在Mysql版本5.0.3之前,Varchar数据类型可以存储255个字符,但从5.0.3开始,它可以存储65,535个字符。
但它有一个最大行大小的限制,即65,535字节。 这意味着包括所有列在内,它不能超过65,535字节。
在你的情况下,有可能当你试图设置超过10000时,它超过了65,535,mysql会给出错误。
欲了解更多信息。 https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
博客与实例。 http://goo.gl/Hli6G3