31

我想在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;

但这犯了一个错误

    BLOB/TEXT column 'name' used in key specification without a key length

当我将 `name` 的类型更改为 varchar .. 它有效!

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

4

3 回答 3

35

基本上你不能使用Text列作为UNIQUE键。因为实际上如此大的列不会是唯一的,并且可能有更多重复的机会。所以去寻找hashing方法并将该输出用作唯一约束。

于 2012-12-25T19:36:21.023 回答
27

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

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

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

...
`name` varchar(65535) NOT NULL, -- for example 
...
于 2012-12-25T19:34:28.240 回答
0

我知道这已经很老了,但是如果其他人想要这样做,您可以使 varchar 或 text 列独一无二,您只需在创建表后进行。

 DROP TABLE IF EXISTS meeting;
CREATE TABLE meeting (
    meeting_id int(11) UNSIGNED UNIQUE NOT NULL PRIMARY KEY AUTO_INCREMENT,
    meeting_name varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
);
CREATE UNIQUE INDEX meeting ON meeting(meeting_name);
于 2021-09-21T19:27:28.047 回答