什么是MySQL VARCHAR最大尺寸?

use*_*628 285 mysql varchar maxlength

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

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

我可以把它设置为varchar(10000).我可以设置的最大值是多少?

raj*_*ndy 282

请记住,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类型的更多详细信息

查看有关所有数据类型的存储要求的数据类型存储要求的更多详细信息.

  • 我尽量避免使用TEXT列,因为它们会导致在存在和排序时创建临时表 (6认同)
  • 什么是"长"字符串? (4认同)
  • @Swish - Temp表有什么问题? (2认同)
  • @PareshGami - 6 + 1 = 7个字符!与CHAR相比,VARCHAR值存储为1字节或2字节长度前缀加数据.[更多...](https://dev.mysql.com/doc/refman/5.0/en/char.html) (2认同)

pax*_*blo 56

根据在线文档,有64K行限制,您可以使用以下方法计算行大小:

row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)
Run Code Online (Sandbox Code Playgroud)

您需要记住,列长度不是它们大小的一对一映射.例如,CHAR(10) CHARACTER SET utf8十个字符中的每一个都需要三个字节,因为特定的编码必须考虑每个字符的三字节属性utf8(即MySQL的utf8编码而不是"真正的"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)
Run Code Online (Sandbox Code Playgroud)

你仍然有字节/字符不匹配(这样一MEDIUMTEXT utf8列可以"只"存储大约五十万个字符,(16M-1)/3 = 5,592,405)但它仍然会大大扩展你的范围.

  • 请记住,TEXT类型不能存储在内存表中,因此当VARCHAR足够时,使用它们会有很大的性能损失. (4认同)

Att*_*ila 37

资源

varchar的最大长度取决于MySQL中的最大行大小,即64KB(不包括BLOB):

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

VARCHAR(21844)CHARACTER SET utf8

  • 请在示例中停止使用`CHARACTER SET utf8`.它应该是`CHARACTER SET utf8mb4`(如果你想要*所有*Unicode文本正确存储......谁不想要那个?) (16认同)
  • 对于`CHARSET = utf8mb4`,使用`VARCHAR(16383)`. (3认同)
  • 在utf8没有的情况下,使用utf8mb4会使你违背索引宽度的限制.如果你检查utf8mb4中包含但不包含在utf8中的字符集,你可能会发现包括所有各种形式的象形文字和其他类似的奥术字符集都不值得显着的性能损失(根据经验确定).它不像Stijn暗示的那样切割和干燥. (3认同)
  • 许多表情符号也存在于 utf8mb4 中,而在 utf8 中缺失,因此这可能会改变是否值得的等式。 (2认同)

Fir*_*rze 17

来自MySQL文档:

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

VARCHAR的限制因使用的字符集而异.使用ASCII将使用每个字符1个字节.意思是你可以存储65,535个字符.使用utf8将使用每个字符3个字节,导致字符限制为21,844.但如果您使用的是现代多字节字符集utf8mb4,您应该使用它!它支持表情符号和其他特殊字符.每个字符使用4个字节.这会将每个表的字符数限制为16,383.请注意,其他字段(如INT)也将计入这些限制.

结论:

utf8最多21,844个字符

utf8mb4最多16,383个字符


SRI*_*RAM 6

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

MySQL中的BLOB类型可以存储多达65,534个字节,如果您尝试存储的数据超过这么多数据,MySQL将截断数据.MEDIUMBLOB最多可存储16,777,213个字节,LONGBLOB最多可存储4,294,967,292个字节.


Sur*_*shi 6

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 : //sforsuresh.in/mysql_varchar_max_length/


mvp*_*mvp -12

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

  • 这并不能回答问题。 (40认同)
  • 您的回答与问题无关。 (3认同)