将文本列设为唯一键

d-d*_*tor 26 mysql sql database unique-key

我想在MySQL服务器中使用mediumtext列作为表UNIQUE KEY

CREATE TABLE `parts` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` mediumtext NOT NULL,
      `display_status` int(11) NOT NULL,
       UNIQUE KEY `name` (`name`),
       PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

但这造成了错误

    BLOB/TEXT column 'name' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)

当我将`name`的类型更改为varchar时,它可以工作!

你能告诉我是否可以将文本列设为 UNIQUE KEY

Mar*_*ari 29

基本上你不能使用Text列作为UNIQUE键.因为实际上这样一个大的列不会是唯一的,并且可能有更多的重复.因此,请hashing使用该方法并将该输出用作UNIQUE约束.

希望这对你有所帮助

  • 请注意,从技术上讲,这不是一个解决方案,因为两个不同的文本值可能会生成相同的哈希 - 即[哈希冲突](http://en.wikipedia.org/wiki/Collision_(computer_science).要确保*保持值唯一,你必须存储整个字符串,*不*在哈希列上有唯一索引. (6认同)

Boh*_*ian 25

varchar长度的限制255不再适用.从文档:

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

唯一索引必须具有已知的最大长度(由于其内部实现而需要mysql),因此请使用具有足够大值的varchar以适合您最长的预期值,例如

...
`name` varchar(65535) NOT NULL, -- for example 
...
Run Code Online (Sandbox Code Playgroud)

  • 好的,但是您不能在 varchar(65535) 上创建唯一键,可以吗? (2认同)