我看到一直在使用VARCHAR(255)而不是VARCHAR(256),但我也看到正在使用VARCHAR(16)而不是VARCHAR(15)。对我来说,这似乎不一致。如果一个额外的字节被用来存储VARCHAR的长度,那么这个规则不是也应该应用于更小的长度,比如2,4,8为1,3,7吗?
还是我完全漏掉了什么?
换句话说,如果我有一个我知道永远不会大于12的数字,我应该直接使用VARCHAR(15)或VARCHAR(16)来代替吗?因为它使用与VARCHAR(12)相同的空间量?如果是,我应该使用哪一个? 15还是16?当我接近256的时候,这个规则会改变吗?
根据项目的不同,我同时使用MySQL和SQL。
发布于 2009-08-03 11:45:15
换句话说,如果我有一个永远不会大于12的数字,我应该直接使用
(15)或VARCHAR(16)吗?
不是的!使用varchar(12) (如果长度相当恒定,甚至可以使用char(12) )。
曾几何时,在某些系统(including MySql prior to 5.0.3)上,varchar类型被限制为255个字符,因为存储的第一个字节表示字段的长度。考虑到这一限制,想要允许合理数量的文本的开发人员将选择255,而不是完全使用不同的数据类型。
但是,如果您知道数据的大小,那么一定要对数据库使用这个大小。
发布于 2009-08-03 11:47:27
它与奇数或偶数无关。
过去,在各种DBMSes中,255个字符通常是VARCHAR
的最大长度。当时不是LOB
(大型对象)的字段的长度限制是255字节(1字节整型)。因此,第一个字节用于存储字段的长度(0-255),其余的n
字节用于存储字符。这就是为什么你经常看到VARCHAR(255)
的原因。
如果该字段永远不会大于12,则使用VARCHAR(12)
。
发布于 2009-08-03 11:46:14
我认为最初的问题是,对于某些系统,VARCHAR(...)限制为255,因为当您使用一个字节来编码实际长度时,最多只能表示255个字节的长度。
VARCHAR(16) / VARCHAR(15)很可能会让人想起这些起源,但这两个值没有什么特别之处。
https://stackoverflow.com/questions/1224226
复制相似问题