Dlaczego pierwszy INSERT przechodzi przez table2. Zauważ, że table2.col_1 NIE ma wartości NULL. Nie wstawia wartości NULL dla col_1, ale w tajemniczy sposób konwertuje wartość NULL na pusty ciąg znaków. Używam MySQL w wersji 5.5.28. DziękiMySQL Wstawia rekord z wartością NULL w kolumnie NOT NULL
mysql> DROP TABLE IF EXISTS table1, table2;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE IF NOT EXISTS table1 (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
-> col_1 VARCHAR(45) NOT NULL ,
-> col_2 VARCHAR(45) NOT NULL ,
-> PRIMARY KEY (`id`))
-> ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE table2 LIKE table1;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO table1 (id, col_1, col_2) VALUES (NULL, "xxx","yyy");
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO table2 (id, col_1, col_2) SELECT NULL, NULL, col_2 FROM table1 WHERE id=1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 1
mysql> SHOW WARNINGS;
+---------+------+-------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------+
| Warning | 1048 | Column 'col_1' cannot be null |
+---------+------+-------------------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM table2;
+----+-------+-------+
| id | col_1 | col_2 |
+----+-------+-------+
| 1 | | yyy |
+----+-------+-------+
1 row in set (0.00 sec)
mysql> INSERT INTO table2 (id, col_1, col_2) VALUES(NULL, NULL, "zzz");
ERROR 1048 (23000): Column 'col_1' cannot be null
mysql> SELECT * FROM table2;
+----+-------+-------+
| id | col_1 | col_2 |
+----+-------+-------+
| 1 | | yyy |
+----+-------+-------+
1 row in set (0.00 sec)
może to wstawia 'ciąg NULL' a nie wartość null (* nic *) –
Dziwne, ja robię to samo i mam dostać null włożona ... Może mógłbyś podać PDO :: PARAM_INT po związaniu wartości? – Sebas
@JW Proszę wyjaśnić. Właśnie edytowałem oryginalny wpis, aby pokazać, jak wstawia on tylko wiersz, jeśli INSERT jest zasilany przez SELECT. – user1032531