什么是MySQL VARCHAR最大尺寸?

时间:2012-11-22 06:13:37

标签: mysql varchar maxlength

我想知道MySQL VARCHAR类型的最大大小是多少。

我读到最大尺寸受行大小约65k的限制。我尝试将字段设置为varchar(20000),但它说这太大了。

我可以将其设置为varchar(10000)。我可以设置的最大值是多少?

7 个答案:

答案 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)数据库中这么宽 - 它可能不常见。

如果您想要使用更多内容,可以使用BLOBTEXT类型。这些不计入行的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)

Source

  

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。