2012-08-09 85 views
1

我有一個電子郵件郵件列表表。每個註冊用戶都有一個激活密鑰。激活密鑰最初是在註冊時創建的。每個鍵都是唯一的。Mysql唯一值或空字符串

一旦用戶確認註冊,這是數據庫中的emptry字符串。

有沒有一種方法可以讓我創建一個獨特的禁忌,如果在場中有空。

換句話說,所有值如果不爲空或唯一的emptry字符串是允許的。

我設置爲唯一併允許爲null,但這不起作用。我無法輸入空值和唯一值,即設置爲空時多次爲空

回答

0

不,您將無法創建這樣的唯一約束,因爲唯一約束就是那個,唯一的和多行NULL或一個空字符串將被重複的行。不過,我會建議你而不是清空這一列,而是使用一個布爾字段,表明註冊已被確認 - 這是更直接的,然後你可以使用該字段的唯一約束。

+0

最好使用一個枚舉或布爾值?,也在訂閱表中我有Facebook的身份證和一個字段,用戶可能不會總是用Facebook登錄,但這需要是唯一的 - 同樣可能發生這可能是空 - 在這種情況下,我是否分開並創建一個聯接,即保持獨特與加入facebook id – 2012-08-09 17:26:18

+1

@MatthewChambers - 我的道歉,與MySQL你可以有一個UNIQUE鍵內的多個NULL值。因此,只要您將該值設置爲NULL,您仍然可以在這些字段上放置一個UNIQUE鍵 - 但是您無法**將它們設置爲空字符串。 – 2012-08-09 18:20:23

+0

什麼是最佳實踐邁克 – 2012-08-09 18:32:07