java - mysql 中 'updated_at' 的默认值无效

标签 java mysql database timestamp

Caused by: java.sql.SQLException: Invalid default value for 'updated_at' Query:

CREATE TABLE IF NOT EXISTS saved_query (id int(11)
NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,description
 varchar(255) DEFAULT NULL,query longtext,params_json
longtext,created_at timestamp DEFAULT CURRENT_TIMESTAMP,updated_at
=timestamp NOT NULL,  PRIMARY KEY (id)) Parameters: []

粘贴查询以提高可读性:

CREATE TABLE IF NOT EXISTS saved_query 
( 
 id          INT(11) NOT NULL auto_increment, 
 name        VARCHAR(255) NOT NULL, 
 description VARCHAR(255) DEFAULT NULL, 
 query       LONGTEXT, 
 params_json LONGTEXT, 
 created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
 updated_at  TIMESTAMP NOT NULL, 
 PRIMARY KEY (id) 
) 

Mysql版本是5.7.13 .上面的查询适用于版本 5.65.5 .以下查询适用于 5.7但不在<5.7版本:

CREATE TABLE IF NOT EXISTS saved_query 
  ( 
     id          INT(11) NOT NULL auto_increment, 
     name        VARCHAR(255) NOT NULL, 
     description VARCHAR(255) DEFAULT NULL, 
     query       LONGTEXT, 
     params_json LONGTEXT, 
     created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
     updated_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
     PRIMARY KEY (id) 
  ) 

5.6 中的错误是:

Caused by: java.sql.SQLException: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause Query:

 CREATE TABLE IF NOT EXISTS saved_query (id
 int(11) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,description
 varchar(255) DEFAULT NULL,query longtext,params_json
 longtext,created_at timestamp DEFAULT CURRENT_TIMESTAMP,updated_at
 timestamp DEFAULT CURRENT_TIMESTAMP,  PRIMARY KEY (id)) Parameters: []

适用于所有这些版本的查询应该是什么?

最佳答案

问题是因为s​​ql_modes。您必须删除 sql_mode 才能使其工作。移除这些 SQL 模式

NO_ZERO_IN_DATE
NO_ZERO_DATE

在运行任何查询之前,将此代码粘贴到代码的第一行:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

在运行任何查询之前,将此代码粘贴到第一行:

SET sql_mode = '';

关于java - mysql 中 'updated_at' 的默认值无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761053/

相关文章:

带有 mysql 数据库的 C# 应用程序,日期保存为字符串

ios - Fetch Request 执行方法不返回任何内容

mySQL 数据库结构代表一个用户关注另一个用户?

java - 像 GWT 的 ORM 库一样对象化

java - Joda 时间,以毫秒为单位的周期

MySQL (0x80004005) 无法连接到任何指定的 MySQL 主机(在非开发计算机上)

mysql - 外键在双向关系中的作用

java - 无法将类型 'java.lang.String' 的属性值转换为属性 'java.util.Date' 所需的类型 'dateOfBirth';

java - 将 List<Type> 转换为 List<OtherType> 的最快方法

php - 查找表中的重复记录及其相关的其他重复记录