0

获取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<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;

最后一切都清楚了。感谢您的回答

4

2 回答 2

3

它应该像你说的那样工作。

但看起来您在列中插入了一个空字符串而不是空字符串。那是不同的。一个唯一列中不能有多个空字符串。

0不是null0是一个值 - 零。但null意味着没有价值。

于 2013-08-09T10:34:53.700 回答
1

AUnique Constraint允许多个Null值。在数据库上下文中,空值实际上意味着Null,因为空字符串(或数字零等)是完全已知的值。您可以做的是使用该NULLIF函数并将空字符串替换为 null (ie Nullif(myValue,'')

于 2013-08-09T10:59:43.833 回答