下記の2つの記事を読んで「でも sql_mode が Strict なときに ENUM に Invalid な値? 整数値が 0 である値? を合法的に入れる方法あったっけ?」と思ってやってみたら妙なことに・・・
テーブル作る。
mysql> set @@sql_mode = STRICT_TRANS_TABLES; mysql> CREATE TABLE flg(id SERIAL, flg1 ENUM("1") NOT NULL); Query OK, 0 rows affected (0.05 sec)
整数 0 では入れられない。
mysql> INSERT INTO flg(flg1) VALUES (0); ERROR 1265 (01000): Data truncated for column 'flg1' at row 1
空文字でも入れられない。
mysql> INSERT INTO flg(flg1) VALUES (''); ERROR 1265 (01000): Data truncated for column 'flg1' at row 1
整数 2 のような範囲外の値でも入れられない。
mysql> INSERT INTO flg(flg1) VALUES (2); ERROR 1265 (01000): Data truncated for column 'flg1' at row 1
文字列 '0' だと・・・!?
mysql> INSERT INTO flg(flg1) VALUES ('0'); Query OK, 1 row affected (0.00 sec)
どうして??
mysql> select * from flg where flg1 = 0; +----+------+ | id | flg1 | +----+------+ | 1 | | +----+------+ 1 row in set (0.00 sec) mysql> select * from flg where flg1 = '0'; Empty set (0.00 sec)