Mysql

將空字元串分配給 MySQL 中的 INT NULL 欄位

  • August 17, 2021

給我一個參考,如果將空字元串 ( '') 分配給一個INT NULL欄位會發生什麼。

它變成NULL0

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’ 不能為空

有關更多資訊,請參閱,

引用自:https://dba.stackexchange.com/questions/212358