为什么MySQL允许VARCHAR(255)拥有更大的数字

时间:2014-04-24 11:20:14

标签: php mysql

当我第一次了解MySQL中的字段类型时,我会将任何不是数字的东西定义为VARCHAR并将长度设置为任何东西。 500 2000,但我是否正确地说最大值实际上是255?

如果是这种情况,为什么MySQL允许我定义具有更大长度的列以及它实际上在做什么?它会允许更大的长度吗?它是否将列/字段定义为其他内容?

欢迎任何建议。

5 个答案:

答案 0 :(得分:0)

最大值为65k

The CHAR and VARCHAR Types

答案 1 :(得分:0)

此行为在5.0.3之后发生了更改:

  

VARCHAR列中的值是可变长度字符串。 长度可以   在MySQL 5.0.3之前指定为0到255之间的值,0到   5.0.3及更高版本中的65,535。 a的有效最大长度   MySQL 5.0.3及更高版本中的VARCHAR受最大行大小的限制   (65,535字节,在所有列之间共享)和字符   设置已使用。

来自The CHAR and VARCHAR Types文档参考。

答案 2 :(得分:0)

在5.0.3之前是255,but now

    Values in VARCHAR columns are variable-length strings. The length can be
 specified as a value from 0 to 65,535.
5.0.x的

The documentation显示了转换:

Values in VARCHAR columns are variable-length strings. The length can be
specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535
in 5.0.3 and later versions.

参考:What is the maximum range of varchar in MySQL?

答案 3 :(得分:0)

varchar(n)与n值之间的差异最大为255,值大于255.

MySQL通过在前一个或两个字节中编码字符串的长度来存储可变长度字符串。对于小于256的值,MySQL使用一个字节的开销作为长度。对于n为256或更大的值,MySQL使用两个字节的开销作为长度。

请注意,这是基于列的定义,而不是基于内容。因此,空字符串('')可以占用1个字节作为varchar(255),2个字节作为varchar(256)(不计算用于存储NULL标志的空间)。

要刷新您的成员,一个字节可以存储0到255之间的整数,两个字节可以存储0到65,535。这就是这些限制的来源。

答案 4 :(得分:-1)

MySQL说明,点击link获取更多信息。

  

VARCHAR(255)列可以包含最大长度为255个字符的字符串。假设该列使用latin1字符集(每个字符一个字节),所需的实际存储量是字符串(L)的长度,加上一个字节来记录字符串的长度。对于字符串'abcd',L为4,存储要求为5个字节。如果声明同一列使用ucs2双字节字符集,则存储要求为10个字节:'abcd'的长度为8个字节,并且该列需要两个字节来存储长度,因为最大长度大于255 (最多510个字节)。