表时的表结构如下: CREATE TABLE `...
Q1
创建表时的表结构如下:
CREATETABLE`hack` (`Id`bigint(11)unsignedNOTNULL AUTO_INCREMENT,`CreateTime`timestampNOTNULLDEFAULT'0000-00-00 00:00:00'COMMENT'创建时间', PRIMARYKEY (`Id`) )ENGINE=InnoDB AUTO_INCREMENT=1211DEFAULTCHARSET=utf8COMMENT='hack';
从console导入进去的时候,报错
> ERROR1067 (42000): Invaliddefaultvaluefor'CreateTime'
然后打出变量
> `>` show variables like'sql_mode';

Variable_nameValue
sql_modeONLY_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
报错
ERROR1101 (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=""
就行了。
参考
http://stackoverflow.com/questions/18762308/how-to-get-rid-of-strict-sql-mode-in-mysql