MySQL「DateTime Not Null Default '1970-01-01'」は0000-00-00 00:00:00に変わります
-
01-10-2019 - |
質問
asを作成した列があります
`date_start` datetime NOT NULL DEFAULT '1970-01-01'
ただし、CSVファイルからデータをアップロードすると、空白のエントリが付いたLoad Dataコマンドを使用してください。 date_start
保存された値は0000-00-00 00:00:00ですか?
解決
MySQL SQLモードはデフォルトでゼロの日付を許可します。
私の信念は、Load Data Infileコマンドは、DateTimeであることを目的とした空白の位置を読み取り、挿入前にゼロ日付を自動的に使用しているということです。これにより、デフォルトの制約が適用されない理由が説明されます。挿入時に値はnullではありません。
2つのオプションがあると思います。
- csvのすべての空白を「、」、「」から「、null」、または「、デフォルト」から更新するので、それらは正しく解釈されます
- SQLモードを変更します:
SET SQL_MODE='NO_ZERO_DATE'
他のヒント
NULL
そして、「空白のエントリ」は、MySQLで常に同じように扱われるとは限りません。の場合 datetime
データ型、空白のエントリは0000-00-00:00:00に自動的に変換されます。これは、ブランクがタイプキャストをゼロにするタイプキャストの形式と考えることができます。
データファイルで、すべての空白の日付をに置き換えてみてください DEFAULT
キーワード。
datetime
列の日付と時刻を形式で保存することを意味します Y-m-d H:i:s
(0000-00-00 00:00:00
).
date
フォーマットの日付だけの列ストアを意味します Y-m-d
(0000-00-00
).
データを挿入するときに値を指定しない場合、デフォルトは使用されますが、CSVファイルからデータを挿入すると、フィールドの値が指定されているため、デフォルトは使用されません。
空白のエントリは、データタイムフィールドの無効な値であるため、値 0000-00-00 00:00:00
代わりに、有効な日付(または部分日)に解析できない価値と同様に使用されます。
MySQLには、colum列に保存するために無効な値が与えられた場合、代わりに事前に定義された「エラー値」を保存するという迷惑な(私の意見では)迷惑な行動があります。たとえば、日付または日付のコンテキストでは、気づいた「ゼロ日付」を保存します。列列の場合、エラー値として保存されます(数値コンテキストで0に対応)。
それは不可分ですが、インポートを実行して、無効なゼロの日付を挿入してから発行することを許可するかもしれません
UPDATE
table_name
SET
date_start = '1970-01-01 00:00:00'
WHERE
date_start = '0000-00-00 00:00:00'