See also: MySQL Bug 43151
The MySQL Manual proudly states that you don’t get implicit default values if strict mode.
mysql> set sql_mode='STRICT_ALL_TABLES'; Query OK, 0 rows affected (0.00 sec) mysql> create table t1 (a int, b int, c int, d int, e int, f int, g int, h int,i int, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; Query OK, 0 rows affected (0.03 sec) mysql> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `a` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0', `c` int(11) NOT NULL default '0', `d` int(11) NOT NULL default '0', `e` int(11) NOT NULL default '0', `f` int(11) NOT NULL default '0', `g` int(11) NOT NULL default '0', `h` int(11) NOT NULL default '0', `i` int(11) NOT NULL default '0', PRIMARY KEY (`a`,`b`,`c`,`d`,`e`,`f`,`g`,`i`,`h`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec) mysql> insert into t1 (a) values (1); Query OK, 1 row affected (0.00 sec)
Which means your getting a default value you never specified.
In my latest Drizzle patch, we no longer give you what you didn’t ask for (an implicit default).
You can still (of course) specify an explicit default (and I’ve done this in some of our test cases).