数据库遇到的问题之“datetime设置默认为CURRENT_TIMESTAMP时报无效默认问题”和“时区问题”

一、问题1

问题描述:

今日加入创建时间和修改时间,并设置为默认CURRENT_TIMESTAMP时,出现错误,指向sql中的datetime字段,查了一下,发现是版本问题

立马查询自己的MySQL版本,发现是5.5.40的,

datetime设置默认为CURRENT_TIMESTAMP时,需要在5.6版本以上才可以

解决方案=

还是老实用:timestamp类型,去设置默认值为当前时间:CURRENT_TIMESTAMP

 

 

二、问题2

以为应该新建成功了 又来了一个报错,也是版本问题,这个限制在后续版本中取消了

主要问题:MySQL 5.6.5版本之前,是只能有一列能够在初始化的时候或者被更新的时候自动设置为CURRENT_TIMESTAMP的值

问题描述:

在利用MySQL语句建立表结构时出现了Error Code : 1293

Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause错误

其建表语句为:

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    gmt_create timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    gmt_update timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '邮箱', 
PRIMARY KEY (id)
);

 


错误原因:在创建表结构时有且只有一个可以在“创建时间”或者“修改时间”上时带上CURRENT_TIMESTAMP

解决办法:

只让一个TIMESTAMP列在设置默认值或更新时带上CURRENT_TIMESTAMP

我这里选择了“创建时间”默认,修改时间就没有默认了,

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    create_time timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '邮箱',
    update_time timestamp COMMENT '邮箱',
    PRIMARY KEY (id)
);

三、问题3

是关于数据库中时间时区的时差的问题

问题描述

默认值为CURRENT_TIMESTAMP 与实际时间相差8小时

解决方案

-- 设置全局
set
@@global.time_zone = '+08:00';
-- 立即刷新数据库 flush
privileges;

 

posted @ 2021-09-17 11:39  骚哥  阅读(6993)  评论(0编辑  收藏  举报