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