空の文字列(''
)がINT NULL
フィールドに割り当てられた場合にどうなるかを参照してください。
NULL
または0
になりますか?
MySQLのすべてのバージョン(5以降)は同じですか?
sql_mode
実行している。モードがstrict
でない場合、挿入された値はその型への強制型と同じになります。
SELECT CAST('' AS int);
+-----------------+
| CAST('' AS int) |
+-----------------+
| 0 |
+-----------------+
1 row in set, 1 warning (0.00 sec)
しかし、ご覧のとおり、これは狂気です。
CREATE TABLE foo ( id int, a int, b int NOT NULL );
INSERT INTO foo VALUES
(1,1,NULL),
(2,NULL,''),
(3,'',NULL),
(4,NULL,NULL);
SELECT * FROM foo;
+------+------+---+
| id | a | b |
+------+------+---+
| 1 | 1 | 0 |
| 2 | NULL | 0 |
| 3 | 0 | 0 |
| 4 | NULL | 0 |
+------+------+---+
4 rows in set (0.00 sec)
ですから、MySQLに冗談ではなく、PostgreSQLのような実際のデータベースのようにしようとすることができます。
SET sql_mode='strict_all_tables';
その後、
TRUNCATE foo;
INSERT INTO foo VALUES
(1,1,NULL),
(2,NULL,''),
(3,'',NULL),
(3,NULL,NULL);
しかし今回は、
エラー1048(23000):列 'b'はnullにできません
詳細については、