在多个课程,书籍和工作中,我看到将文本字段定义为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,则不需要此额外代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top