Kip*_*Kip 138 database varchar database-design types
在多个课程,书籍和工作中,我看到将文本字段定义为VARCHAR(255)作为"短"文本的默认类型.有没有什么好的理由经常选择长度为255,而不是一个漂亮的圆数?在有充分理由(无论今天是否适用)的情况下,过去的某个时间是坚持吗?
当然,我意识到,如果你以某种方式知道字符串的最大长度,那么更严格的限制会更理想.但是如果你使用VARCHAR(255)可能表示你不知道最大长度,那只是它是一个"短"字符串.
注意:我发现这个问题(VARCHAR(255)V TINYBLOB v TINYTEXT),它表示,VARCHAR(Ñ)需要Ñ 1个字节的存储空间用于Ñ <= 255,Ñ 2个字节的存储对的Ñ > 255.这是唯一的原因吗?这似乎有点武断,因为与VARCHAR(256)相比,你只能保存两个字节,你可以通过声明VARCHAR(253)轻松地保存另外两个字节.
Rob*_*vey 150
使用255是因为它是可以用8位数计数的最大字符数.它最大限度地利用了8位计数,而不需要另外的整个字节来计算255以上的字符数.
当以这种方式使用时,VarChar仅使用字节数+ 1来存储文本,因此您也可以将其设置为255,除非您想要字段中字符数的硬限制(如50).
cha*_*aos 92
从历史上看,255个字符通常是VARCHAR
某些DBMS 中a的最大长度,如果您想使用UTF-8并将列编入索引(由于索引长度限制),它有时仍会成为有效最大值.
Cha*_*ana 19
可能是因为SQL Server和Sybase(我熟悉的两个名字)曾经在VARCHAR
列中的字符数中最多包含255个字符.对于SQL Server,这在1996/1997左右的版本7中发生了变化......但旧习惯有时会很难.
Mus*_*sis 15
我将回答字面上的问题: 不,没有一个很好的理由你经常使用VARCHAR(255)(确实存在理由,正如其他答案所讨论的那样,只是不好的理由).您将找不到灾难性失败的项目的许多示例,因为架构师选择了VARCHAR(300)而不是VARCHAR(255).即使你在谈论CHAR而不是VARCHAR,这也是一个几乎无足轻重的问题.
小智 12
当你说2^8
你得到256
,但计算机术语中的数字从数字开始0
.那么,你得到了255
,你可以在互联网掩码中探测IP或IP本身.
255
是8位整数的最大值: 11111111 = 255
这有帮助吗?
注意:我发现了这个问题(varchar(255)v tinyblob v tinytext),它表示VARCHAR(n)需要n + 1个字节的存储空间用于n <= 255,n + 2个字节的存储空间用于n> 255.这是唯一的原因吗?这似乎有点武断,因为与VARCHAR(256)相比,你只能保存两个字节,你可以通过声明VARCHAR(253)轻松地保存另外两个字节.
不,你没有通过声明253来保存两个字节.varchar的实现很可能是长度计数器和可变长度的非终止数组.这意味着如果在varchar(255)中存储"hello",则将占用6个字节:长度为一个字节(数字为5),五个字母为5个字节.