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

错误描述

在DBeaver执行DDL语句时报错:SQL 错误 [1293] [HY000]: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
DDL语句如下:

CREATE TABLE `etl_conf_d` (
  `jobName` varchar(128) NOT NULL,
  `jobNo` int(11) DEFAULT NULL,
  `jobDesc` varchar(128) DEFAULT NULL,
  `validFlg` varchar(1) DEFAULT NULL,
  `runFlg` varchar(1) DEFAULT NULL,
  `runStartTimestamp` TIMESTAMP ,
  `runEndTimestamp` TIMESTAMP,
  `finalEndTimestamp` TIMESTAMP,
  `queryMinute` int(11) NOT NULL DEFAULT 0,
  `etlStartTimestamp` TIMESTAMP ,
  `etlEndTimestamp` TIMESTAMP ,
  `createUser` varchar(128) DEFAULT NULL,
  `createTimestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `evtUser` varchar(128) DEFAULT NULL,
  `evtTimestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`jobName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

解决过程

查阅发现是MySQL版本的问题。MySQL低版本不支持在一个表里面有两个TIMESTAMP类型。
检查MySQL版本:

C:Usersxuqy>mysql -V
mysql  Ver 8.0.22 for Win64 on x86_64 (MySQL Community Server - GPL)

高于5.5.x,可以支持两个Timestamp。但是DBeaver测试连接时,显示我的MySQLServer版本是5.5.28

检查后我发现,我本地8.0.22版本的MySQL并没有安装成功,services中运行的还是5.5.28的旧版本。但是不知道为什么我使用mysql -V显示的是8.0.22

解决方法

  1. 重新安装8.0.22版本的MySQL;
  2. 换DBeaver的连接,8.x.x版本的MySQL连接应该选择MySQL 8+而不是MySQL
原文地址:https://www.cnblogs.com/daheww/p/14460926.html