Ham*_*ite 18
http://dev.mysql.com/doc/refman/5.0/en/create-index.html
"UNIQUE索引创建一个约束,使索引中的所有值必须是不同的.如果您尝试添加一个键值与现有行匹配的新行,则会发生错误.此约束不适用于NULL值,除了BDB存储引擎.对于其他引擎,UNIQUE索引允许包含NULL的列的多个NULL值."
所以,不,你不能让MySQL将NULL视为唯一值.我想你有几个选择:你可以在你的问题中做你建议的并存储一个"特殊值"而不是null,或者你可以使用BDB引擎作为表.我不认为这种微小的行为差异可能会使存储引擎做出不同寻常的选择.
我通过在同一个表上创建一个虚拟(存储)列来解决这个问题COALESCE(column_b, 0)
。然后,我根据该列(和第二列)创建了唯一的复合索引。效果很好。
当然,这在 2010 年可能是不可能的:)