代码之家  ›  专栏  ›  技术社区  ›  Kip

我是否有充分的理由看到varchar(255)经常使用(而不是另一个长度)?

  •  122
  • Kip  · 技术社区  · 15 年前

    在多个课程、书籍和作业中,我看到了定义为varchar(255)的文本字段,它是“短”文本的默认类型。有没有什么好的理由选择255的长度如此频繁,除了 a nice round number ?它是否是过去某个时期的坚持,当时有一个很好的理由(无论它是否适用于今天)?

    当然,我知道,如果你知道绳子的最大长度,越紧的极限就越理想。但是如果您使用的varchar(255)可能表示您不知道最大长度,只知道它是一个“短”字符串。


    注意:我发现这个问题( varchar(255) v tinyblob v tinytext 也就是说varchar( n 要求 n +1字节的存储空间 n lt=255, n +2字节的存储空间 n gt;255。这是唯一的原因吗?这看起来有点随意,因为与varchar(256)相比,您只保存了两个字节,而通过声明varchar(253),您也可以轻松地保存另外两个字节。

    8 回复  |  直到 8 年前
        1
  •  80
  •   chaos    8 年前

    历史上,255个字符通常是 VARCHAR 在某些DBMS中,如果要使用UTF-8并对列进行索引(因为索引长度限制),它有时仍然是有效的最大值。

        2
  •  139
  •   Robert Harvey    15 年前

    使用255是因为它是可以用8位数字计数的最大字符数。它最大化了8位计数的使用,而不需要另一个完整的字节来计数超过255个字符。

    这样使用时,varchar只使用字节数+1来存储文本,因此您也可以将其设置为255,除非您希望对字段中的字符数进行硬限制(如50)。

        3
  •  16
  •   chaos    15 年前

    可能是因为SQL Server和Sybase(我熟悉的两个名称)在 VARCHAR 列。对于SQL Server,这在1996/1997年的第7版中发生了变化…但旧习惯有时很难消逝。

        4
  •  14
  •   MusiGenesis    15 年前

    我要回答字面上的问题: ,您看到varchar(255)经常使用(确实有 原因 如其他答案所述,只是不好的答案)。由于架构师选择了varchar(300)而不是varchar(255),所以您不会找到许多灾难性失败的项目示例。这将是一个几乎完全没有意义的问题,即使你是在谈论char而不是varchar。

        5
  •  9
  •   Andrew Barber Tejas Tank    13 年前

    当你说 2^8 你得到 256 ,但计算机术语中的数字从数字开始 0 . 那么,你就得到了 255 ,您可以在IP的Internet掩码中或在IP本身中进行探测。

    二百五十五 是8位整数的最大值: 11111111 = 255

    这有帮助吗?

        6
  •  6
  •   Stefano Borini    15 年前

    注意:我发现这个问题 (varchar(255)v tinyblob v tinytext) 这说明varchar(n)需要 n+1字节的存储空间,n<=255,n+2 n>255的存储字节数。这是 唯一的原因?看起来有点像 武断,因为你只会 与相比节省两个字节 varchar(256),你可以 通过以下方式轻松保存另外两个字节 声明它varchar(253)。

    不,您不会通过声明253来保存两个字节。 varchar的实现很可能是一个长度计数器和一个可变长度的非终止数组。这意味着如果将“hello”存储在varchar(255)中,您将占用6个字节:长度(数字5)为1个字节,5个字母为5个字节。

        7
  •  3
  •   gahooa    15 年前

    无符号1字节数可以包含范围[0-255]。所以当你看到255的时候,主要是因为程序员的思维基础 10 (懂笑话吗?):)

    实际上,有一段时间,在MySQL中,255是可以给varchar的最大大小,使用varchar比使用带索引和其他问题的文本有很多优势。

        8
  •  3
  •   Joaquin Montes    14 年前

    在许多应用程序中,如MSOffice(直到2000或2002版),每个单元格的最大字符数是255。从能够处理每个字段超过255个字符的程序向这些应用程序移动数据是一场噩梦。目前,限制越来越少。