MySQL对列的唯一约束不允许插入多个空值和空字符串。ENGINE=InnoDB

28 浏览
0 Comments

MySQL对列的唯一约束不允许插入多个空值和空字符串。ENGINE=InnoDB

使用SHOW CREATE TABLE获取以下信息:

 (      
  `Number` int(11) NOT NULL AUTO_INCREMENT,
  `CompanyName` char(255) COLLATE utf8_unicode_ci NOT NULL,
  `RegistrationNumber` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
   UNIQUE KEY `Number_2` (`Number`),
   UNIQUE KEY `CompanyName` (`CompanyName`),
   UNIQUE KEY `RegistrationNumber` (`RegistrationNumber`)
 ) ENGINE=InnoDB AUTO_INCREMENT=280 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

RegistrationNumber中需要允许插入多个NULL和空值。

然而,出现错误Integrity constraint violation: 1062 Duplicate entry '' for key 'RegistrationNumber'

在这里http://forums.mysql.com/read.php?22,53591,53591了解到对于InnoDB,NULL不被视为唯一值。

在这里https://stackoverflow.com/a/1346776/2465936了解到唯一约束允许空值。

请指导如何在RegistrationNumber中插入多个空值。我需要在RegistrationNumber varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,中做出更改吗?

或者使用ENGINE=InnoDB不可能吗?改成MyISAM后,仍然出现同样的错误...

更新

哦...我要疯了

$sql = "INSERT INTO 18_6_TransactionPartners (RegistrationNumber) VALUES";
$insertQuery = array();
$insertData = array();
foreach ($num_row_1 as $i => $row) {
$insertQuery[] = '(?)';
if ( (strlen($data_b[$i])) > 0 ) {
echo '(strlen($data_b[$i])) > 0';
$insertData[] = $data_b[$i];
}
else {
echo '??? null??? ';
$insertData[] = 'NULL';
}
}

然后得到QLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'NULL' for key 'RegistrationNumber'

现在是什么问题?

需要将$insertData[] = 'NULL'更改为$insertData[] = NULL;

最终一切都清楚了。谢谢回答。

0
0 Comments

MySQL唯一约束对列不允许插入多个空字符串或空值。这个问题的原因是,唯一约束要求每个值都是唯一的,而空字符串和空值是不同的。在唯一列中,不能有多个空字符串。

解决这个问题的方法是将空字符串和0转换为NULL。这样,就可以插入多个NULL值了。

以下是解决这个问题的代码示例:

ALTER TABLE your_table MODIFY your_column INT NULL;
UPDATE your_table SET your_column = NULL WHERE your_column = 0;
UPDATE your_table SET your_column = NULL WHERE your_column = '';
ALTER TABLE your_table MODIFY your_column INT NOT NULL;

这段代码首先修改表中的列,将其允许为NULL。然后,使用UPDATE语句将所有的空字符串和0值都转换为NULL。最后,再将列修改为不允许为NULL。

通过执行这些操作,就可以解决MySQL唯一约束对列不允许插入多个空字符串或空值的问题了。

0
0 Comments

在MySQL中,如果某一列设置了Unique Constraint(唯一约束),允许多个Null值存在。在数据库的上下文中,空值实际上指的是Null,因为空字符串(或数字零等)是已知的值。

解决这个问题的方法是使用NULLIF函数,将空字符串替换为Null(即Nullif(myValue,''))。

0