Mysql: エラー:mysql 5.7以降で「不正な日時値:列の「0000-00-00」...」

作成日 2017年12月22日  ·  6コメント  ·  ソース: go-sql-driver/mysql

問題の説明

「ゼロ」のtime.TimeオブジェクトをDATETIME列のあるテーブルに挿入しましたが、 Incorrect datetime value: '0000-00-00' for columnエラーが発生します。

サンプルコード

以下のコードは失敗します:

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

time.Time{}time.Now()に置き換えると、コードが失敗しなくなります。

構成

*ドライバーバージョン(またはgit SHA):9181e3a86a19bacd63e68d43ae8b7b36320d8092(マスター)
* Goバージョン:Goバージョンgo1.9 linux / amd64
*サーバーバージョン:mysql 8.0.3、5.7.20
*サーバーOS:fedora 26

全てのコメント6件

これはMySQLの仕様であり、私たちにできることは何もありません。
MySQLでは有効な日時のみを使用する必要があります。

これはMySQLの仕様であり、私たちにできることは何もありません。
MySQLでは有効な日時のみを使用する必要があります。

ありがとね!
代わりにTIMESTAMPを使用すると機能しますか?

これはMySQLユーザーフォーラムではありません...

MySQLプロトコルについてはよく知っていますが、MySQLの動作についてはよくわかりません。

関連する問題: https ://github.com/go-sql-driver/mysql/pull/346

このページは役に立ちましたか?
0 / 5 - 0 評価