mysql使用navicat导入有时间戳的数据报错问题解决

mysql5.7.21版本导入含有时间戳的sql语句报错

sql语句中带timestam时间戳 ,导入含有时间戳的字段报错 invalid default value fot ‘fctime’

SET FOREIGN_KEY_CHECKS=0;


– Table structure for twallets


DROP TABLE IF EXISTS twallets;
CREATE TABLE twallets (
FID varchar(50) NOT NULL,
FBUSERUNIQUE varchar(50) DEFAULT NULL,
FPAYEEUNIQUE varchar(50) DEFAULT NULL,
FPAYEENAME varchar(128) DEFAULT NULL,
FBLANCE decimal(11,2) DEFAULT NULL,
FUTIME timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FCTIME timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
FISVALID char(1) DEFAULT NULL,
FPBUNIQUE varchar(128) DEFAULT NULL,
FPBUCODE varchar(50) DEFAULT NULL,
FUSERNAME varchar(128) DEFAULT NULL,
PRIMARY KEY (FID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

原因:
从5.6版本后timestamp设定默认规则改变,不能为‘0000-00-00 00:00:00’

解决:
mysql -uroot -p 登录mysql

先查看sql_mode默认规则

mysql> show session variables like ‘%sql_mode’;
| 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为时间戳默认规则

修改sql_mode 去掉NO_ZERO_IN_DATE,NO_ZERO_DATE

mysql> set sql_mode =‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
执行成功后 再次执行带有时间戳的sql语句就ok了

你可能感兴趣的:(工作)