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は、一意の制約で空の値が許可されていることを読んでください。

RegistrationNumberDo I need to change something in に複数の空の値を挿入する方法をアドバイスしてください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

あなたが言うように動作するはずです。

しかし、列にnullではなく空の文字列を挿入しているようです。それは違います。一意の列に複数の空の文字列を含めることはできません。

0ありませんnull0は値 - ゼロです。しかし、価値がないnullことを意味します。

于 2013-08-09T10:34:53.700 に答える
1

AUnique Constraintは複数のNull値を許可します。データベースのコンテキストでは、空の文字列(または数字のゼロなど) は完全に既知の値であるため、空の値は実際には を意味します。あなたができることは、関数を使用して空の文字列をnullに置き換えることです(つまり)NullNULLIFNullif(myValue,''

于 2013-08-09T10:59:43.833 に答える