2016-08-04 29 views
-1

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: []Ungültige Standardwert für 'updated_at' in mysql

die Abfrage zur besseren Lesbarkeit einfügen:

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 Version ist 5.7.13. Die obige Abfrage funktioniert in den Versionen 5.6 und 5.5. Die folgende Abfrage funktioniert in 5.7 aber nicht in <5.7 Versionen:

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) 
) 

Der Fehler in 5.6 ist:

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: []

Was sollte die Abfrage sein, die in all diesen Versionen funktioniert?

+0

was hat das mit java zu tun? –

+0

Ändern Sie created_at auf nur TIMESTAMP und füllen Sie es im ersten Datensatz INSERT. Logisch im Nachhinein, nicht wahr? –

Antwort

-1

TIMESTAMP kann nicht NULL sein, und mysql DEFAULT CURRENT_TIMESTAMP für Spalte hinzufügen. Kann aber nur eine Spaltenbreite DEFAULT CURRENT_TIMESTAMP sein. Verwenden Sie einfach '0000-00-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) 
) 
+0

Stört es Sie zu erklären, warum das funktioniert? – prongs

+0

Funktioniert nicht. Fehler: 'Fehler: Ungültiger Standardwert für 'created_at' SQLState: 42000 ErrorCode: 1067' – prongs

+0

@prongs siehe aktualisierte Antwort –