我设定varchar的最大值为745(也设置为唯一)。
更新:
也许与最大键长为1000字节有关:
最大键长度为1000字节。这也可以通过更改源代码并重新编译来更改。对于键长大于250字节的情况,使用比默认值1024字节更大的密钥块大小。
由于在键上创建了索引并且它可以在没有索引的情况下工作,因此这是有意义的。
尽管如此,您可以在大于1000字节的varchar
列上建立索引,正如您可以在下面的答案中阅读到的那样。
或者,如果您正在使用InnoDB,则存在一些限制:
索引键前缀最多可达767字节。请参见第12.1.8节“CREATE INDEX Syntax”。
我认为这是为了确保索引不会过大并能够快速运行。
如果一个字符串列很可能具有唯一的前缀字符,则最好仅对该前缀进行索引,并利用MySQL支持在列的左侧部分创建索引的功能(请参见第12.1.8节“CREATE INDEX Syntax”)。较短的索引更快,不仅因为它们需要更少的磁盘空间,而且还因为它们在索引缓存中提供了更多的命中,从而减少了磁盘寻道。请参见第7.5.3节“调整服务器参数”。
这也意味着您可以定义应该建立索引的此类列的前n
个字符。也许这有助于避免问题。
例子:
CREATE INDEX part_of_name ON customer (name(10));
旧版的mysql?
5及以上版本可以使用长varchar
VARCHAR列中的值是可变长度字符串。在MySQL 5.0.3之前,长度可以指定为0到255的值,在5.0.3及以后的版本中可以指定为0到65,535。在MySQL 5.0.3及以后的版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,这是所有列共享的)和所使用的字符集。浏览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)
下一步可能会更长的是文本
,但据我所知,它在数据库中有一些非常巨大的长度限制(如果有的话),因此您需要在编程SQL/后端应用程序逻辑中提供限制。