Ungültiger Standardwert für DateTime beim Wechsel zu utf8_general_ci


7

Ich versuche, ein Skript auszuführen, um eine Datenbank zu ändern, diese Abfrage

ALTER TABLE cmContentVersion CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

gibt diesen Fehler

ERROR 1067 (42000) at line 68: Invalid default value for 'modifiedDateTime'
Warning (Code 1264): Out of range value for column 'modifiedDateTime' at row 1
Error (Code 1067): Invalid default value for 'modifiedDateTime'

Die Spalte modifiedDateTimeist definiert als

`modifiedDateTime` datetime NOT NULL default '0000-00-00 00:00:00',

Frage: Gibt es einen gültigen " ungültigen " Standardwert, der 0000-00-00 00:00:00bei Verwendung von utf8_general_ci ersetzt werden kann? Oder muss ich den Entwicklern sagen, dass sie sich nicht mehr auf ein " ungültiges Datum " in ihrem Code verlassen sollen?

Antworten:


14

Dies scheint eher ein Problem im SQL-Modus zu sein als der Zeichensatz. Der strikte Modus (und insbesondere NO_ZERO_DATE, das Teil des strengen Modus ist) löst diesen Fehler normalerweise aus, wenn die Tabelle vor dem Aktivieren von strikt mit einem Standarddatum von Null erstellt wurde.

Was wir verwenden (für ähnliche Spalten mit geändertem Datum), ist das '1970-01-01 00:00:01'.

In einem leicht verwandten Zusammenhang verwenden wir den Zeitstempel für diese Spalten (und auch für die erstellte Zeit). Nimmt die Hälfte des Speicherplatzes ein und ist schneller zugänglich.


1
NO_ZERO_IN_DATE, NO_ZERO_DATE wurde in der neuen Datenbank festgelegt, danke für das Erkennen.
Nifle

@ TechieGurl: +1 für einen guten Fang !!!
RolandoMySQLDBA
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.