Mysql唯一字段将不接受多个空值

Mysql唯一字段将不接受多个空值,mysql,sql,null,unique,Mysql,Sql,Null,Unique,我有一个表,其中包含一个video_id字段,该字段设置为unique accept NULL值。但是,它不接受两个空值。表类型InnoDB或MYISAM将不起作用 这会在视频_id上产生重复的密钥错误(空值): 如果我正确阅读了Mysql规则,它应该会这样做。有人能建议下一步去哪里吗?为什么需要表格的多行具有空视频id 从DB设计的角度来看,使用表建模的对象听起来太“大”,需要分解为主表和明细表 您的选项是(A)删除唯一约束,或(B)创建一个单独的表,其中包含对象id,视频id对(其中对象id

我有一个表,其中包含一个video_id字段,该字段设置为unique accept NULL值。但是,它不接受两个空值。表类型InnoDB或MYISAM将不起作用

这会在视频_id上产生重复的密钥错误(空值):


如果我正确阅读了Mysql规则,它应该会这样做。有人能建议下一步去哪里吗?

为什么需要表格的多行具有空视频id

从DB设计的角度来看,使用表建模的对象听起来太“大”,需要分解为主表和明细表


您的选项是(A)删除唯一约束,或(B)创建一个单独的表,其中包含
对象id
视频id
对(
其中对象id
主键在
主表上的任何内容)

你可以试试BDB(我对它一无所知);有关更多信息,请参阅。

是的,MySQL允许在具有唯一约束的列中使用多个null。看

空字符串
'
NULL
不同

改用这个:

INSERT INTO dances (name, video_id, level) VALUES ('abc', NULL, 'beg');

我不知道改变底层引擎可以实现这一点……这篇参考文献似乎支持我的理解,即在InnoDB中,多个null应该可以工作。无论如何,感谢您的参考。显示您的创建表语句显示出现这种情况的小示例(
create table
INSERT
几行)。您可以使用“您是否碰巧在列中添加了一个
DEFAULT x
属性?”该表非常简单:-id、舞蹈名称、视频id、舞蹈级别。该id指的是youtube上的舞蹈视频,但有些人没有。实际上,我可以去掉惟一约束,但我不明白为什么空值会导致重复密钥失败。根据Mysql的信息,应该可以。感谢您的评论。@TerryWright从数据建模的角度来看,舞蹈表的每一行都描述了舞蹈的属性。当一个舞蹈有0个或更多的其他东西时,这实际上不是舞蹈的一个属性,而是一个“有一个”关系,通常会得到一个单独的表。也许在您正在开发的系统中,每个舞蹈只有0或1个视频,保持简单可能是可取的,但是数据建模师可能会说,嘿,一个舞蹈可能有很多视频,一个长视频也可能显示几个舞蹈,可能需要一张表(舞蹈id,视频id)按说明配对。插入
舞蹈
名称
视频id
级别
)值('abc',''beg')这会在视频'
空字符串与
。@TerryWright:使用此:插入舞蹈(名称、视频id、级别)值('abc',null',beg')
INSERT INTO dances (name, video_id, level) VALUES ('abc', NULL, 'beg');