2012-04-14 39 views
2

我試圖成員,日期和問題在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 

任何方式來解決這個問題?

謝謝!

回答

2

它通常不會太大的意義來指定用戶輸入的長文本字段唯一鍵約束。用戶仍然可以不止一次詢問相同的問題,只需添加一個空間或進行一些其他小改動。

如果你的目的是防止意外轉播然後使用一個隱藏字段使用GUID或類似的唯一標識符。

+0

你是我的意圖是防止意外發生。我如何/何時產生guid? – Genadinik 2012-04-14 04:07:30

+0

@Genadinik:您可以在服務器上生成一個唯一的標識符(例如GUID),並將其添加到窗體中,類型爲「隱藏」。當你得到回傳時,你將相同的值插回到數據庫中。如果表單發佈兩次,第二次將失敗。 – 2012-04-14 04:09:43

+0

偉大的,最後一個問題...什麼應該是數據庫中的數據類型的GUID?只是varchar? – Genadinik 2012-04-14 04:11:54

3

你可以散列問題,存儲哈希值的字段。由於哈希值會小得多,您可以在其上添加約束條件。很有可能,沒有兩個獨特的問題會對相同的值進行散列。

注意:你會與此有相同的問題,你會在這些問題只有細微的差別。

1

添加哈希新列(MD5,或其他)。當問題被問到時,填充哈希列以及..然後用你的索引而不是問題字段。