2

我正在尝试按成员、日期和问题在 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

有什么办法可以解决这个问题?

谢谢!!

4

3 回答 3

3

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

注意:当问题只有微小差异时,您会遇到同样的问题。

于 2012-04-14T04:05:03.290 回答
2

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

如果您的目的是防止意外转发,请使用带有 GUID 或类似唯一标识符的隐藏字段。

于 2012-04-14T04:04:53.623 回答
1

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

于 2012-04-14T04:06:29.623 回答