我想知道MySQL VARCHAR类型的最大大小是什么。
我读到最大大小受行大小限制,约为65k。我尝试将字段设置为varchar(20000),但它说这太大了。
varchar(20000)
我可以将它设置为varchar(10000)。我能设置的最大值是多少?
varchar(10000)
你可以使用TEXT类型,它不限制为64KB。
TEXT
你也可以使用MEDIUMBLOB/LONGBLOB或MEDIUMTEXT/LONGTEXT
在MySQL中,一个BLOB类型最多可以存储65,534字节,如果你试图存储超过这个数量的数据,MySQL将截断数据。MEDIUMBLOB最多可以存储16,777,213个字节,LONGBLOB最多可以存储4,294,967,292个字节。
请记住,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类型来克服行大小限制。
这四种文本类型分别是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需要为10个字符中的每个字符提供3个字节,因为特定的编码必须考虑到utf8的每个字符3字节属性(即MySQL的utf8编码而不是"real";UTF-8,最多可以有四个字节)。
CHAR(10) CHARACTER SET utf8
utf8
但是,如果行大小接近64K,则可能需要检查数据库的模式。在一个正确设置的(3NF)数据库中,很少需要这么宽的表——它是可能的,,只是不太常见。
如果你想使用更多类型,你可以使用BLOB或TEXT类型。这些不计入64 k限制的行(除了一个小行政足迹)但是你需要注意的其他问题,来自他们的使用,如不能排序使用整个文本块超出一定数量的字符(虽然这向上可以配置),迫使临时表在磁盘上而不是在内存中,或者配置客户端和服务器通讯有效处理大小的缓冲区。
BLOB
允许的尺寸为:
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列只能存储"大约50万个字符,(16M-1)/3 = 5,592,405),但它仍然大大扩展了你的范围。
MEDIUMTEXT utf8
(16M-1)/3 = 5,592,405
< a href = " https://stackoverflow.com/questions/332798/equivalent-of-varcharmax-in-mysql " > < / >来源
varchar的最大长度取决于MySQL中的最大行大小。 64KB(不包括blob): 但是,请注意,如果您使用a,则限制会更低 多字节字符集: VARCHAR(21844)字符集utf8
VARCHAR(21844)字符集utf8
在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/
来自MySQL文档:
在MySQL 5.0.3及以后版本中VARCHAR的有效最大长度是 取决于最大行大小(65,535字节,由 所有列)和使用的字符集。例如,utf8字符 每个字符最多需要三个字节,所以一个VARCHAR列 使用utf8字符集最多可以声明为21,844 字符。< / p >
VARCHAR的限制取决于所使用的字符集。使用ASCII将每个字符使用1个字节。这意味着你可以存储65,535个字符。使用utf8将每个字符使用3个字节,导致字符限制为21,844。但是如果你使用的是现代多字节字符集utf8mb4,你应该使用!它支持表情符号和其他特殊字符。每个字符将使用4个字节。这将限制每个表的字符数为16,383。请注意,其他字段(如INT)也将按这些限制计算。
结论:
use utf8最多21844年个字符
utf8mb4最多16383年个字符
在我的情况下,我尝试了20'000根据@Firze答案(UTF8限制)和phpMyAdmin响应的最大大小;答案是减少或选择BLOB。
所以,我认为,最后,最好的是根据你拥有的MySQL版本和使用的引擎进行测试。因为MySQL / phpMyAdmin有安全措施。