MySQL - 尝试在长文本字段上获取唯一键

时间:2012-04-14 04:03:20

标签: mysql

我试图通过成员,日期和问题在MySQL中添加约束,以便同一个用户每天不能多次问同一个问题。

alter table questions add UNIQUE INDEX three_UNIQUE ( member_id , question , date );

但由于问题字段是长文本,我收到此错误:

ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

以任何方式解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以散列问题,并将散列值存储为字段。由于哈希值会小得多,因此您可以在其上添加约束。很有可能,没有两个独特的问题会散列到相同的值。

注意:与问题只有细微差别的情况相比,你会遇到同样的问题。

答案 1 :(得分:2)

在用户输入的长文本字段中指定唯一键约束通常没有多大意义。用户仍然可以不止一次地询问同一个问题,只需添加一个空格或进行其他一些小的改动。

如果您打算阻止意外重新发布,请使用带有GUID或类似唯一标识符的隐藏字段。

答案 2 :(得分:1)

为哈希添加新列(md5或其他)。当问到这个问题时,也要填充哈希列..然后在你的索引而不是问题字段中使用它。