我想知道MySQL VARCHAR类型的最大大小是多少。
我读到最大尺寸受行大小约65k的限制。我尝试将字段设置为varchar(20000)
,但它说这太大了。
我可以将其设置为varchar(10000)
。我可以设置的最大值是多少?
答案 0 :(得分:266)
请记住,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及更高版本中VARCHAR的有效最大长度受最大行大小(65,535字节,在所有列之间共享)和使用的字符集的限制。
但是,请注意,如果使用utf8或utf8mb4等多字节字符集,则限制较低。
使用TEXT
类型来克服行大小限制。
四种TEXT类型是TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT。这些对应于四种BLOB类型,并具有相同的最大长度和存储要求。
有关BLOB和TEXT类型的更多详细信息
更多
查看有关所有数据类型的存储要求的Data Type Storage Requirements的更多详细信息。
答案 1 :(得分:56)
根据the online docs,有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's utf8
encoding而不是“{{3}}真正的“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
),但它仍会大大扩展您的范围。
答案 2 :(得分:35)
varchar的最大长度取决于MySQL中的最大行大小, 这是64KB(不包括BLOB):
VARCHAR(65535)但是,请注意,如果使用a,则限制较低 多字节字符集:
VARCHAR(21844)CHARACTER SET utf8
答案 3 :(得分:13)
来自MySQL文档:
MySQL 5.0.3及更高版本中VARCHAR的有效最大长度为 受最大行大小限制(65,535字节,在其中共享) 所有列)和使用的字符集。例如,utf8个字符 每个字符最多可以需要三个字节,所以VARCHAR列 使用utf8字符集可以声明最大为21,844 字符。
VARCHAR的限制因使用的字符集而异。使用ASCII将使用每个字符1个字节。意思是你可以存储65,535个字符。使用utf8将使用每个字符3个字节,导致字符限制为21,844。但如果您使用的是现代多字节字符集utf8mb4,您应该使用它!它支持表情符号和其他特殊字符。每个字符使用4个字节。这会将每个表的字符数限制为16,383。请注意,其他字段(如INT)也将计入这些限制。
结论:
utf8 最多 21,844 个字符
utf8mb4 最多 16,383 个字符
答案 4 :(得分:6)
你也可以使用MEDIUMBLOB / LONGBLOB或MEDIUMTEXT / LONGTEXT
MySQL中的BLOB类型最多可存储65,534字节,如果您尝试存储的数据超过这么多数据,MySQL将截断数据。 MEDIUMBLOB最多可存储16,777,213个字节,LONGBLOB最多可存储4,294,967,292个字节。
答案 5 :(得分:3)
在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
答案 6 :(得分:-5)
您可以使用TEXT
type,但不限于64KB。