Answers:
请记住,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到65535之间的值。在MySQL 5.0.3及更高版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。
但是,请注意,如果使用多字节字符集(如utf8或utf8mb4),则该限制会降低。
使用TEXT
类型以克服行大小限制。
四种TEXT类型是TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT。这些对应于四种BLOB类型,并且具有相同的最大长度和存储要求。
有关BLOB和TEXT类型的更多详细信息
更
查阅有关数据类型存储要求的更多详细信息,该要求处理所有数据类型的存储要求。
按照 在线文档,行限制为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)数据库中需要那么宽- 可能,不是很常见。
如果您想使用更多功能,可以使用 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
),但是它仍然大大扩展了您的范围。
utf8mb4
。utf8mb4
是MySql的名称,其余单词称为utf8。
varchar的最大长度取决于MySQL中的最大行大小,即64KB(不包括BLOB):
VARCHAR(65535)但是,请注意,如果使用多字节字符集,则该限制会降低:
VARCHAR(21844)字符集utf8
CHARACTER SET utf8
示例。应该是CHARACTER SET utf8mb4
(如果您希望所有 Unicode文本都正确存储...而谁又不想呢?)
CHARSET=utf8mb4
使用VARCHAR(16383)
。
从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最多21844个字符
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