Bug #43880 | If strict SQL mode enabled, attempts to insert invalid ENUM values don't error | ||
---|---|---|---|
Submitted: | 26 Mar 2009 11:54 | Modified: | 12 Nov 2013 8:21 |
Reporter: | James b | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.0.51a-3ubuntu5.4, 5.0.79, 5.1.32, 6.0.9 | OS: | Linux |
Assigned to: | CPU Architecture: | Any |
[26 Mar 2009 11:54]
James b
[26 Mar 2009 12:45]
Valeriy Kravchuk
Thank you for the bug report. Verified just as described with 5.0.79 and 5.1.32: C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot -P3310 test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.1.32-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> drop table test; Query OK, 0 rows affected (0.06 sec) mysql> create table test ( -> ID Integer not null primary key, -> test enum('1','2','3') not null -> ) engine=innodb; Query OK, 0 rows affected (0.08 sec) mysql> SET SESSION sql_mode='STRICT_ALL_TABLES'; Query OK, 0 rows affected (0.00 sec) mysql> insert into test set ID=1, test='0'; Query OK, 1 row affected (0.09 sec) mysql> select * from test; +----+------+ | ID | test | +----+------+ | 1 | | +----+------+ 1 row in set (0.00 sec) Looks like '0' is treated as index actually. Any other invalid ENUM value is not accepted: mysql> insert into test set ID=2, test='4'; ERROR 1265 (01000): Data truncated for column 'test' at row 1 mysql> select * from test; +----+------+ | ID | test | +----+------+ | 1 | | +----+------+ 1 row in set (0.00 sec)
[12 Nov 2013 8:21]
Erlend Dahl
[5 Jun 2013 1:56] Raghav Kapoor: This behaviour is documented. See http://dev.mysql.com/doc/refman/5.7/en/enum.html#enum-indexes When we try to store '0' in an enum defined as {'1', '2', '3'} '0' is treated as an Index value for empty string. An empty string will be stored when we give '0'. It means we can use SELECT * FROM tbl_name WHERE enum_col=0; to find rows into which invalid ENUM values were assigned. If we insert any other value in enum like '4' or '5' or '-1' or '-2' etc in STRICT MODE, we get an error. Therefore, IMO it is not a bug.