Incorrect date value: ‚0000-00-00‘ for column … in MySQL 5.7.12

Ich hatte letztens das Problem mit einer GSALES Installation das das Updateskript nicht alle Änderungen an der Tabelle umsetzen konnte weil folgender Fehler auftrat:

ERROR 1292 (22007): Incorrect date value: '0000-00-00' for column 'birthdate' at row 1

Blöderweise zeigt das Updateskript keinen Fehler an, bei der Verwendung von GSALES gibt es aber Probleme wenn z.B. ein Kundendatensatz aktualisiert wird. Hier kam es dann zu einem SQL Update Fehler weil einige Spalten von dem letzten Update gefehlt haben.

Nach einer Recherche in der SQL Updateroutine im GSALES Installer konnte ich die fehlenden ALTER TABLES lokalisieren:

ALTER TABLE `customers` ADD `glob_i_zugferd` TINYINT NOT NULL DEFAULT  '1' AFTER  `d_template`;
ALTER TABLE `customers` ADD `i_zugferd` varchar(200) NULL  AFTER  `glob_i_zugferd`;
ALTER TABLE `customers` ADD `i_zugferd_leitwegid` varchar(200) NULL  AFTER  `i_zugferd`;
ALTER TABLE `invoices` ADD `i_zugferd` varchar(200) NULL  AFTER  `custom5`;
ALTER TABLE `invoices` ADD `i_zugferd_leitwegid` varchar(200) NULL  AFTER  `i_zugferd`;

Bei einem manuellen Ausführen auf der Datenbank kommt es dann zu dem oben genannten Fehler

ERROR 1292 (22007): Incorrect date value: '0000-00-00' for column 'birthdate' at row 1

Hintergrund ist der Strict Mode von MySQL 5.7, siehe dazu MySQL :: MySQL 5.7 Reference Manual :: 5.1.10 Server SQL Modes

Mit folgenden SQL Statement kann man prüfen ob der Strict Mode aktiviert ist:

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session;

Werden hier Werte zurückgegeben ist der Strict Mode aktiv.

In meinem Fall hat NO_ZERO_DATE verhindert das das Updatescript von GSALES die Tabellen anpassen konnte da es bei dem ALTER zu obengenannten Fehler gekommen ist.

Der Strict Mode lässt sich Global und für die Session wie folgt deaktivieren:

Global deaktivieren

SET GLOBAL sql_mode = '';

oder für die Session

SET sql_mode = '';

Mehr Details dazu auch auf Stackoverflow, hier wurde gleiches Problem in ähnlichem Zusammenhang behandelt.

sql – Error in MySQL when setting default value for DATE or DATETIME – Stack Overflow

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.