Mysql
將空字元串分配給 MySQL 中的 INT NULL 欄位
給我一個參考,如果將空字元串 (
''
) 分配給一個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’ 不能為空
有關更多資訊,請參閱,