为什么我不能将varchar设置为1000的长度

时间:2010-03-04 17:23:18

标签: mysql

如果这很重要,我也将其设置为唯一

我设法为varchar设置的最大值是 745 (它也设置为唯一)。

5 个答案:

答案 0 :(得分:4)

取决于您运行的MySQL版本,在5.0.3之前,varchar有255个字符的限制:

  

VARCHAR列中的值是   变长字符串。长度   可以指定为0到0之间的值   在MySQL 5.0.3之前255,并且0到   5.0.3及更高版本中的65,535。

来自:http://dev.mysql.com/doc/refman/5.0/en/char.html

答案 1 :(得分:2)

<强>更新

可能与1000字节的最大密钥长度有关:

  

最大密钥长度为1000个字节。这也可以通过更改源和重新编译来更改。对于长度大于250字节的密钥的情况,使用比默认的1024字节更大的密钥块大小。

由于为密钥创建了索引,并且因为它在没有索引的情况下工作,这是有道理的 不过,您可以在大于1000字节的varchar列上建立索引,您可以在下面的答案中阅读。

或者,如果您使用InnoDB,那么有一些restrictions

  

索引键前缀最多可达767个字节。请参见第12.1.8节“CREATE INDEX语法”。


我认为这是为了确保索引不会变得太大并且可以快速接受。

  

如果字符串列很可能在第一个字符数上有唯一的前缀,那么最好只使用MySQL支持在列的最左边部分创建索引来索引此前缀(参见第12.1节) .8,“CREATE INDEX语法”)。 更短的索引更快,不仅因为它们需要更少的磁盘空间,而且因为它们还会在索引缓存中为您提供更多的匹配,从而减少磁盘搜索次数。请参见第7.5.3节“调整服务器参数”。

这也意味着您可以定义应该编入索引的此类列的第一个n字符。也许这有助于规避问题。

示例:

CREATE INDEX part_of_name ON customer (name(10));

答案 2 :(得分:1)

旧的mysql?

5和更新版本可以使用long varchar

http://dev.mysql.com/doc/refman/5.0/en/char.html

  

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

答案 3 :(得分:1)

围绕MySQL手册的小访问应该是有用的: http://dev.mysql.com/doc/refman/5.0/en/char.html

  

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

另外一个: 键值长度不能超过500个字符。 (截至http://bugs.mysql.com/bug.php?id=2130报告)

答案 4 :(得分:0)

下一步的长度可能是text,但据我所知,它有一些非常大的数据库内长度限制,如果有的话,所以你必须在编程sql /中提供限制后端应用程序逻辑。