MySQL中的多个唯一不支持NULL

sha*_*jin 4 mysql unique

ALTER TABLE admins ADD CONSTRAINT uc_EmailandDeleted_at UNIQUE (email,deleted_at);
Run Code Online (Sandbox Code Playgroud)

我已将表更改为按以下方式工作:

ID  EMAIL                  DELETED_AT  
1.  user@example.com          NULL             <- accept  
2.  user@example.com          NULL             <- reject because of uniqueness.
Run Code Online (Sandbox Code Playgroud)

但是它没有按我希望的那样工作。如果我给两个相同的日期

Deleted_at
如我所料,它正在产生错误。但不适用于NULL值。任何的想法?

注意:deleted_at由于使用的是acts_as_paranoid,因此无法更改列的行为。所以我必须保持deleted_at字段为NULL或任何日期。

Joe*_*lli 5

文档中

UNIQUE索引会创建约束,以使索引中的所有值都必须不同。如果您尝试添加键值与现有行匹配的新行,则会发生错误。除BDB存储引擎外,此约束不适用于NULL值。对于其他引擎,UNIQUE索引允许可以包含NULL的列使用多个NULL值。

以上摘录自MySQL 5.0。MySQL在5.1.12中删除了BDB存储引擎。所以现在从最新文档中

对于所有引擎,UNIQUE索引允许可以包含NULL的列使用多个NULL值。如果为UNIQUE索引中的列指定前缀值,则列值在前缀中必须唯一。