将文本列设置为唯一键。

13 浏览
0 Comments

将文本列设置为唯一键。

我想在MySQL服务器中创建一个具有mediumtext列作为UNIQUE KEY的表。\nCREATE TABLE `parts`(\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `name` mediumtext NOT NULL,\n `display_status` int(11) NOT NULL,\n UNIQUE KEY `name` (`name`),\n PRIMARY KEY (`id`)\n ) ENGINE=MyISAM DEFAULT CHARSET=utf8;\n但是这样会出错。\nBLOB/TEXT列\'name\'在没有键长度的键规范中使用。\n当我将\'name\'的类型更改为varchar时,它可以工作!\n你能告诉我如何将text列作为UNIQUE KEY吗?

0
0 Comments

问题出现的原因:在上述内容中,提到了可以将一个varchar或text列设置为唯一键,但是需要在表创建之后进行操作。这暗示了在表创建时,无法直接将varchar或text列设置为唯一键。

解决方法:为了解决这个问题,可以在表创建之后,使用CREATE UNIQUE INDEX命令来为varchar或text列创建唯一索引。通过这种方式,可以实现将varchar或text列设置为唯一键的目的。

下面是一个示例代码,演示了如何在表创建之后为varchar列创建唯一索引:

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);

以上是对问题出现原因以及解决方法的整理。通过在表创建之后使用CREATE UNIQUE INDEX命令,可以实现将varchar或text列设置为唯一键的功能。这样,就可以有效地管理数据表中的唯一性约束。

0
0 Comments

问题:为什么无法在varchar(65535)上创建唯一键?解决方法是什么?

在MySQL的文档中,varchar列的长度可以在MySQL 5.0.3之前指定为0到255,在MySQL 5.0.3及以后的版本可以指定为0到65535。然而,唯一索引必须有已知的最大长度,这是由于MySQL的内部实现所要求的。

因此,为了适应最长的预期值,可以将varchar的长度设置为一个足够大的值,例如varchar(65535)。

然而,不能在varchar(65535)上创建唯一键。根据stackoverflow上的回答,具有唯一索引的列的最大长度是varchar(767)。

所以,解决方法是将varchar的长度设置为varchar(767),以便在该列上创建唯一键。

0
0 Comments

在MySQL中,无法将Text列作为UNIQUE键。因为实际上这样一个大的列不会是唯一的,可能存在更多的重复。所以可以采用哈希方法,并将输出作为UNIQUE约束。

需要注意的是,从技术上讲,这并不是一个解决方案,因为两个不同的文本值可能生成相同的哈希 - 即哈希冲突。为了确保保持值的唯一性,您必须存储整个字符串,并且在哈希列上没有唯一索引。

对于那些真正想要理解为什么MySQL会有这种行为的人,可以参考一个更深入的回答。但实际上,鉴于我们使用了一个合理的哈希算法,这种冲突发生的机会非常非常低,所以这将是一个很好的实用解决方案,不是吗?

这取决于人口规模和哈希算法。例如,当使用32位哈希结果时,在约70K个个体中,任意两个个体之间发生碰撞的机会为50/50。

这种方法在MySQL中不起作用,但在MariaDB中起作用。

“所以采用哈希方法,并将输出作为UNIQUE约束。”似乎来自另一个星球,因为没有人在讨论之前提到哈希。对此给予负评。

0