Q1
创建表时的表结构如下:
CREATE TABLE `hack` (
`Id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
`CreateTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1211 DEFAULT CHARSET=utf8 COMMENT='hack';
从console导入进去的时候,报错
> ERROR 1067 (42000): Invalid default value for 'CreateTime'
然后打出变量
> `>` show variables like 'sql_mode';
Variable_name | Value |
---|---|
sql_mode | ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION |
发现是这两个变量导致了报错:NO_ZERO_IN_DATE
& NO_ZERO_DATE
百度了一下,了解到
NO_ZERO_DATE
在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告。
NO_ZERO_IN_DATE
在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插 入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。
修改变量:
> `>` set session sql_mode='ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION'
Q2
报错
ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'Ovalue' can't have a default value
实际上,text
或blob
字段不允许有缺省值,这是由于strict mode
导致的,只要在my-template.ini
中去掉
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
或linux下在my.conf
中去掉
sql_mode=""
就行了。
参考