por*_*ton 4 mysql datatypes type-conversion
给我一个参考,如果将空字符串 ( '') 分配给一个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)
Run Code Online (Sandbox Code Playgroud)
然而,这是疯狂的,正如你所看到的..
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)
Run Code Online (Sandbox Code Playgroud)
所以我们可以告诉 MySQL 尽量不要开玩笑,更像一个真正的数据库,比如 PostgreSQL
SET sql_mode='strict_all_tables';
Run Code Online (Sandbox Code Playgroud)
进而,
TRUNCATE foo;
INSERT INTO foo VALUES
(1,1,NULL),
(2,NULL,''),
(3,'',NULL),
(3,NULL,NULL);
Run Code Online (Sandbox Code Playgroud)
但这一次我们得到,
错误 1048 (23000):列 'b' 不能为空
有关更多信息,请参阅,