文档首页/ 云数据库 GaussDB(for MySQL)/ 故障排除/ SQL类/ 建表时timestamp字段默认值无效
更新时间:2024-09-05 GMT+08:00

建表时timestamp字段默认值无效

场景描述

客户执行一个建表SQL语句失败,详细SQL语句及报错如下:

CREATE TABLE cluster_membership
(
...
session_start TIMESTAMP DEFAULT '1970-01-01 00:00:01',
...
);

执行失败,失败原因:ERROR 1067: Invalid default value for 'session_start'

原因分析

表字段类型是TIMESTAMP类型,

关于timestamp字段:MySQL会把该字段插入的值从当前时区转换成UTC时间(世界标准时间)存储,查询时,又将其从UTC时间转化为当前时区时间返回

  1. timestamp类型字段的时间范围:'1970-01-01 00:00:01' UTC -- '2038-01-19 03:14:07' UTC,详见官方文档
  2. 使用如下命令,查看当前的时区:
    show variables like "%zone%";
  3. 故障场景中使用的是utc+8时区,如下图,所以timestamp字段默认值需要加8小时才是有效范围,有效支持的范围是从1970-01-01 08:00:01开始;

解决方案

执行命令,修改timestamp字段参数默认值。

session_start TIMESTAMP DEFAULT '1970-01-01 08:00:01',