web-dev-qa-db-ja.com

MySQLのINT NULLフィールドに空の文字列を割り当てる

空の文字列('')がINT NULLフィールドに割り当てられた場合にどうなるかを参照してください。

NULLまたは0になりますか?

MySQLのすべてのバージョン(5以降)は同じですか?

1
porton

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にできません

詳細については、

3
Evan Carroll