Mysql: Fehler: "Falscher Datumszeitwert: '0000-00-00' für Spalte ..." unter MySQL 5.7 und höher

Erstellt am 22. Dez. 2017  ·  6Kommentare  ·  Quelle: go-sql-driver/mysql

Fehlerbeschreibung

Ich habe ein "null" time.Time-Objekt in eine Tabelle mit einer DATETIME-Spalte eingefügt und erhalte den Fehler Incorrect datetime value: '0000-00-00' for column .

Beispielcode

Der folgende Code schlägt fehl:

package main

import (
    "database/sql"
    "log"
    "time"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, _ := sql.Open("mysql", "root:secret@(127.0.0.1:3306)/test")
    _, err := db.Exec("CREATE TABLE IF NOT EXISTS daty (col DATETIME)")
    if err != nil {
        log.Panicf("Failed create: %s", err)
    }
    _, err = db.Exec("INSERT INTO daty (col) VALUES (?)", time.Time{})
    if err != nil {
        log.Panicf("Failed insert: %s", err)
    }
}

Das Ersetzen time.Time{} durch time.Now() führt dazu, dass der Code nicht fehlschlägt.

Aufbau

*Treiberversion (oder git SHA): 9181e3a86a19bacd63e68d43ae8b7b36320d8092 (Master)
*Go-Version: Go-Version go1.9 Linux/Amd64
*Serverversion: mysql 8.0.3, 5.7.20
*Server-Betriebssystem: Fedora 26

Alle 6 Kommentare

Es ist die Spezifikation von MySQL und es gibt nichts, was wir können.
Sie sollten nur gültige Datetime mit MySQL verwenden.

Es ist die Spezifikation von MySQL und es gibt nichts, was wir können.
Sie sollten nur gültige Datetime mit MySQL verwenden.

Hallo danke!
Die Verwendung von TIMESTAMP würde stattdessen funktionieren?

Dies ist kein MySQL-Benutzerforum ...

Ich weiß viel über das MySQL-Protokoll, aber ich weiß nicht viel über das Verhalten von MySQL.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen