【发布时间】:2016-12-10 04:56:18
【问题描述】:
原因:java.sql.SQLException:默认值无效 'updated_at' 查询:
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.6 和5.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 中的错误是:
原因:java.sql.SQLException:不正确的表定义;那里 只能是一个 TIMESTAMP 列,其中 CURRENT_TIMESTAMP 为 DEFAULT 或 ON UPDATE子句查询:
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: []
适用于所有这些版本的查询应该是什么?
【问题讨论】:
-
这和java有什么关系?
-
将 created_at 更改为只是 TIMESTAMP 并将其填充到第一条记录 INSERT 中。事后看来是合乎逻辑的吗?
标签: java mysql database timestamp