Java ';的默认值无效;更新地址';在mysql中

Java ';的默认值无效;更新地址';在mysql中,java,mysql,database,timestamp,Java,Mysql,Database,Timestamp,原因:java.sql.SQLException:的默认值无效 “更新位置”查询: 粘贴查询以确保可读性: 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, par

原因:java.sql.SQLException:的默认值无效 “更新位置”查询:

粘贴查询以确保可读性:

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.6
5.5
版本中工作。以下查询在
5.7
中工作,但在
中不工作
时间戳
不能为
NULL
,mysql为列添加
默认当前时间戳
。但可能只有一个列宽
默认当前时间戳
。只需使用
'0000-00-00:00:00'

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 '0000-00-00 00:00:00',
     updated_at  TIMESTAMP DEFAULT '0000-00-00 00:00:00',
     PRIMARY KEY (id) 
  )

问题在于sql_模式。您必须删除sql_模式才能使其正常工作。删除这些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有什么关系?将在处创建的更改为仅时间戳,并在第一次插入记录时填充它。事后看来,这是合乎逻辑的,不是吗?行不通。错误:
Error:SQLState:42000错误代码:1067的“created\u at”默认值无效
NO_ZERO_IN_DATE
NO_ZERO_DATE
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
SET sql_mode = '';