什么是MySQL VARCHAR最大大小?

我想知道MySQL VARCHARtypes的最大大小是多less。

我读到最大的大小是由约65k的行大小限制。 我试图设置字段为varchar(20000)但它说这太大了。

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

请记住,MySQL具有最大的行大小限制

MySQL表的内部表示的最大行大小限制为65535字节,不包括BLOB和TEXTtypes。 BLOB和TEXT列仅向行大小限制提供9到12个字节,因为它们的内容与行的其余部分分开存储。 阅读更多关于表列数和行大小的限制。

在MySQL 5.0.3之前和之后,单个列可以占用的最大大小是不同的

VARCHAR列中的值是可变长度的string。 在MySQL 5.0.3之前,长度可以指定为0到255之间的值,5.0.3和更高版本中的长度可以是0到65,535 。 在MySQL 5.0.3及更高版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和使用的字符集。

但是,请注意,如果使用多字节字符集(如utf8或utf8mb4),则限制较低。

使用TEXTtypes来克服行大小的限制。

四种TEXTtypes是TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT。 这些对应于四种BLOBtypes,并具有相同的最大长度和存储要求。

有关BLOB和TEXTtypes的更多详细信息

详细了解数据types存储要求 ,处理所有数据types的存储要求。

根据在线文档 ,有一个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)数据库中这么广泛 – 这是可能的,不太常见。

如果您想使用更多,可以使用BLOBTEXTtypes。 这些不计入行的64K限制(除了一个小的行政区域外),但是您需要了解其使用所带来的其他问题,例如不能使用整个文本块超出特定数量(尽pipe可以向上configuration),强制临时表位于磁盘而不是内存中,或者必须configuration客户端和服务器通信缓冲区来有效地处理大小。

允许的大小是:

 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 ),但它仍然大大扩展你的范围。

资源

一个varchar的最大长度取决于MySQL中的最大行大小,即64KB(不计算BLOB):

VARCHAR(65535)但是,请注意,如果使用多字节字符集,则限制更低:

VARCHAR(21844)字符集utf8

您也可以使用MEDIUMBLOB / LONGBLOB或MEDIUMTEXT / LONGTEXT

MySQL中的一个BLOBtypes可以存储多达65,534个字节,如果你试图存储更多的数据,MySQL将会截断这些数据。 MEDIUMBLOB最多可存储16,777,213个字节,而LONGBLOB最多可存储4,294,967,292个字节。

从MySQL文档:

在MySQL 5.0.3及更高版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和使用的字符集。 例如,utf8字符每个字符最多可能需要三个字节,因此使用utf8字符集的VARCHAR列可以声明为最多21,844个字符。

VARCHAR的限制取决于使用的字符集。 使用ASCII将使用每个字符1个字节。 意思是你可以存储65535个字符。 使用utf8将使用每个字符3个字节,导致字符数限制为21,844。 但是如果你正在使用你应该使用的现代多字节字符集utf8mb4! 它支持emojis和其他特殊字符。 它将使用每个字符4个字节。 这将限制每个表的字符数为16,383。 请注意,其他字段(如INT)也将计入这些限制。

结论:

utf8最大为21,844个字符

utf8mb4最多16,383个字符

您可以使用TEXTtypes ,不限于64KB。

在Mysql版本5.0.3之前,Varchar数据types可以存储255个字符,但是从5.0.3可以存储65535个字符。

但是它的最大行大小限制在65535字节。 这意味着包括所有列不能超过65535字节。

在你的情况下,可能有可能当你试图设置超过10000时,超过了65535,而mysql会给出错误。

有关更多信息,请访问: https : //dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

博客例如: http : //goo.gl/Hli6G3

MySQL VARCHAR的最大大小是65,535字节。 它可以存储65535个字符。