有没有一个很好的理由我经常使用VARCHAR(255)(而不是另一个长度)?
-
10-07-2019 - |
题
在多个课程,书籍和工作中,我看到将文本字段定义为VARCHAR(255),作为<!> quot; shortish <!> quot;的默认值。文本。除了一个不错的回合数字?在过去的某个时候,当有充分的理由(无论今天是否适用)时,这是一种坚持吗?
当然,我知道如果你知道字符串的最大长度,更严格的限制会更理想。但是如果你使用VARCHAR(255)可能表示你不知道最大长度,只有它是<!> quot; shortish <!> quot;字符串。
注意:我发现了这个问题( varchar(255)v tinyblob v tinytext ),表示VARCHAR( n )需要 n +1字节的存储空间 n <!> lt; = 255, n <!> gt; 255 +2个字节的存储空间。这是唯一的原因吗?这似乎有点武断,因为与VARCHAR(256)相比,你只能保存两个字节,你可以通过声明VARCHAR(253)来轻松地保存另外两个字节。
解决方案
从历史上看,255个字符通常是某些DBMS中VARCHAR
的最大长度,如果您想使用UTF-8并将列编入索引(由于索引长度),它有时仍会成为有效最大值限制)。
其他提示
255是因为它是可以使用8位数计数的最大字符数。它最大限度地利用了8位计数,而不需要另外的整个字节来计算255以上的字符数。
当以这种方式使用时,VarChar仅使用字节数+ 1来存储您的文本,因此您也可以将其设置为255,除非您想要字段中字符数的硬限制(如50)
可能是因为SQL Server和Sybase(我熟悉的两个名字)在VARCHAR
列中的字符数最多只有255个字符。对于SQL Server,这在1996/1997左右的版本7中发生了变化......但旧习惯有时会很难。
我将回答字面上的问题:没有,你没有很好的理由看到常常使用VARCHAR(255)(确实存在原因 ,正如其他答案所讨论的那样,只是不好的)。您将找不到灾难性失败的项目的许多示例,因为架构师选择了VARCHAR(300)而不是VARCHAR(255)。即使你在谈论CHAR而不是VARCHAR,这也是一个几乎无足轻重的问题。
当您说2^8
时,您获得256
,但计算机中的数字从数字0
开始。那么,你得到了255
,你可以在互联网掩码中探测IP或IP本身。
11111111 = 255
是8位整数的最大值:<=>
这有帮助吗?
注意:我发现了这个问题 (varchar(255)v tinyblob v tinytext), 这表示VARCHAR(n)需要 n <!> lt; = 255,n + 2的n + 1字节存储空间 n <!> gt; 255的存储字节数。这是 唯一的理由?这似乎有点儿 任意的,因为你只会 与...相比节省两个字节 VARCHAR(256),你也可以 轻松保存另外两个字节 宣布它为VARCHAR(253)。
没有。你不要通过声明253来保存两个字节。 varchar的实现很可能是长度计数器和可变长度的非终止数组。这意味着如果存储<!>“; hello <!>”;在varchar(255)中,您将占用6个字节:长度为一个字节(数字为5),五个字母为5个字节。
无符号1字节数可以包含[0-255]范围。所以当你看到255时,主要是因为程序员在基础10
中思考(得到笑话?):)
实际上,有一段时间,255是你在MySQL中提供VARCHAR的最大尺寸,使用VARCHAR优于TEXT以及索引和其他问题是有好处的。
在许多应用程序中,例如MsOffice(直到版本2000或2002),每个单元格的最大字符数为255.从能够处理超过255个字符到每个字段的程序移动数据是一个噩梦。目前,限制越来越少阻碍。
另一个原因可能是在Windows上非常旧的数据访问库(如RDO和ADO(COM版本不是ADO.NET))中,您必须调用一个特殊方法GetChunk来从超过255个字符的列中获取数据。如果将varchar列限制为255,则不需要此额外代码。