我想知道MySQL VARCHAR类型的最大大小是什么。
我读到最大大小受行大小限制,约为65k。我尝试将字段设置为varchar(20000),但它说这太大了。
我可以把它设置为varchar(10000)我能设置的最大值是多少?
我想知道MySQL VARCHAR类型的最大大小是什么。
我读到最大大小受行大小限制,约为65k。我尝试将字段设置为varchar(20000),但它说这太大了。
我可以把它设置为varchar(10000)我能设置的最大值是多少?
当前回答
根据在线文档,有一个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)数据库中,很少需要这么宽的表——这是可能的,只是不太常见。
If you want to use more than that, you can use the BLOB or TEXT types. These do not count against the 64K limit of the row (other than a small administrative footprint) but you need to be aware of other problems that come from their use, such as not being able to sort using the entire text block beyond a certain number of characters (though this can be configured upwards), forcing temporary tables to be on disk rather than in memory, or having to configure client and server comms buffers to handle the sizes efficiently.
允许的尺寸为:
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),但它仍然极大地扩展了您的范围。
其他回答
您可以使用TEXT类型,不限制为64KB。
在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/
你也可以使用MEDIUMBLOB/LONGBLOB或MEDIUMTEXT/LONGTEXT
在MySQL中,一个BLOB类型最多可以存储65,534字节,如果你试图存储超过这个数量的数据,MySQL将截断数据。MEDIUMBLOB最多可以存储16,777,213个字节,LONGBLOB最多可以存储4,294,967,292个字节。
根据在线文档,有一个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)数据库中,很少需要这么宽的表——这是可能的,只是不太常见。
If you want to use more than that, you can use the BLOB or TEXT types. These do not count against the 64K limit of the row (other than a small administrative footprint) but you need to be aware of other problems that come from their use, such as not being able to sort using the entire text block beyond a certain number of characters (though this can be configured upwards), forcing temporary tables to be on disk rather than in memory, or having to configure client and server comms buffers to handle the sizes efficiently.
允许的尺寸为:
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),但它仍然极大地扩展了您的范围。
源
varchar的最大长度取决于MySQL中的最大行大小, 64KB(不包括blob): 但是,请注意,如果您使用 多字节字符集: VARCHAR(21844)字符集utf8