使用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读取Unique约束允许空值。
请建议如何在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<br>';
$insertData[] = $data_b[$i];
}
else {
echo '??? null??? <br>';
$insertData[] = 'NULL';
}
}
获取QLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'NULL' for key 'RegistrationNumber'
现在有什么问题?
需要将$insertData[] = 'NULL'
更改为$insertData[] = NULL;
最后一切都很清楚。谢谢你的回答
答案 0 :(得分:3)
但是看起来你插入一个空字符串而不是null到你的列中。那是不同的。您不能在唯一列中包含多个空字符串。
0
不是null
。 0
是一个零值。但null
表示否值。
答案 1 :(得分:1)
Unique Constraint
允许多个Null
值。在数据库上下文中,空值实际上意味着Null
,因为空字符串(或数字零等)是完全已知的值。
您可以做的是使用NULLIF
function并将空字符串替换为空(即Nullif(myValue,''
)