として作成された列があります
`date_start` datetime NOT NULL DEFAULT '1970-01-01'
ただし、保存された値の空白のエントリを持つ LOAD DATA コマンドを使用して CSV ファイルからデータをアップロードすると、date_start
0000-00-00 00:00:00 になりますか?
として作成された列があります
`date_start` datetime NOT NULL DEFAULT '1970-01-01'
ただし、保存された値の空白のエントリを持つ LOAD DATA コマンドを使用して CSV ファイルからデータをアップロードすると、date_start
0000-00-00 00:00:00 になりますか?
NULL
および「空白のエントリ」は、MySql では常に同じように扱われるわけではありません。データ型の場合datetime
、空白のエントリは自動的に 0000-00-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 SQL モードでは、デフォルトでゼロ日付が許可されます。
私の考えでは、LOAD DATA INFILE コマンドは、DATETIME を意図した空白の位置を読み取り、挿入前にゼロの日付を自動的に使用しています。これは、デフォルトの制約が適用されない理由を説明します-挿入時に値がnullではありません。
次の 2 つのオプションがあると思います。
SET SQL_MODE='NO_ZERO_DATE'
MySQL には (私の意見では) 厄介な動作があり、状況によっては、列に格納する無効な値が指定された場合、代わりに定義済みの「エラー値」が格納されます。たとえば、日付または日時のコンテキストでは、気づいた「ゼロ日付」が格納されます。ENUM 列の場合、エラー値として '' (数値コンテキストの 0 に相当) が格納されます。
エレガントではありませんが、インポートを実行して、無効なゼロの日付を挿入できるようにしてから、次を発行してみてください。
UPDATE
table_name
SET
date_start = '1970-01-01 00:00:00'
WHERE
date_start = '0000-00-00 00:00:00'