MySQL TIMESTAMP 类型建表异常
建表报错信息
incalid default value for 'xxx'
建表语句
CREATE TABLE `表名`(
...
字段名 TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00' ,
...
)
报错原因
MySQL的sql_mode
参数会影响对日期时间的处理方式。如果NO_ZERO_DATE
或者STRICT_TRANS_TABLES
模式被启用,那么默认值'0000-00-00 00:00:00'
将被认为是无效的。
因此,在这些模式下,将默认值设为'0000-00-00 00:00:00'
会导致错误。
解决方式
① 调整默认值
将建表语句改为如下所示,表示默认值为当前时间戳。
CREATE TABLE `表名`(
...
字段名 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
...
)
将建表语句改为如下所示,表示默认值为NULL。
CREATE TABLE `表名`(
...
字段名 TIMESTAMP NULL DEFAULT NULL,
...
)
② 调整sql_mode参数
修改sql_mode参数值为ALLOW_INVALID_DATES
,表示不对无效的日期进行严格的检查,从而接受一些看似无效的日期值。
调整sql_mode参数有两种方式,分别为会话级别配置和全局级别配置。
会话级别配置只对当前会话有效,sql如下:
SET sql_mode = 'ALLOW_INVALID_DATES';
全局级别配置需要修改MySQL的配置文件,并且需要修改后重启MySQL服务,MySQL配置文件通常是my.cnf
或my.ini
,将一下内容添加到配置文件:
[mysqld]
sql_mode = 'ALLOW_INVALID_DATES'