1

として作成された列があります

`date_start` datetime NOT NULL DEFAULT '1970-01-01'

ただし、保存された値の空白のエントリを持つ LOAD DATA コマンドを使用して CSV ファイルからデータをアップロードすると、date_start0000-00-00 00:00:00 になりますか?

4

5 に答える 5

2

NULLおよび「空白のエントリ」は、MySql では常に同じように扱われるわけではありません。データ型の場合datetime、空白のエントリは自動的に 0000-00-00 00:00:00 に変換されます。これは、空白がゼロに型キャストされる型キャストの形式と考えることができます。

DEFAULTデータ ファイルで、すべての空白の日付をキーワードに置き換えてみてください。

于 2010-09-08T15:50:41.870 に答える
0

datetime列が日付と時刻を形式Y-m-d H:i:s0000-00-00 00:00:00)で格納することを意味します。

dateY-m-d列が日付だけを形式( )で格納することを意味します0000-00-00

于 2010-09-08T15:37:08.287 に答える
0

データを挿入するときに値を指定しない場合はデフォルトが使用されますが、CSV ファイルからデータを挿入する場合はフィールドの値が指定されるため、デフォルトは使用されません。

空白のエントリは日時フィールドの無効な値であるため0000-00-00 00:00:00、有効な日付 (または部分的な日付) に解析できない値と同様に、代わりに値が使用されます。

于 2010-09-08T15:51:27.360 に答える
0

MySQL SQL モードでは、デフォルトでゼロ日付が許可されます。

私の考えでは、LOAD DATA INFILE コマンドは、DATETIME を意図した空白の位置を読み取り、挿入前にゼロの日付を自動的に使用しています。これは、デフォルトの制約が適用されない理由を説明します-挿入時に値がnullではありません。

次の 2 つのオプションがあると思います。

  1. CSV 内のすべての空白を「, ,」から「, NULL,」または「, DEFAULT」に更新して、正しく解釈されるようにします
  2. SQL モードを変更しますSET SQL_MODE='NO_ZERO_DATE'
于 2010-09-08T15:55:39.920 に答える
0

MySQL には (私の意見では) 厄介な動作があり、状況によっては、列に格納する無効な値が指定された場合、代わりに定義済みの「エラー値」が格納されます。たとえば、日付または日時のコンテキストでは、気づいた「ゼロ日付」が格納されます。ENUM 列の場合、エラー値として '' (数値コンテキストの 0 に相当) が格納されます。

エレガントではありませんが、インポートを実行して、無効なゼロの日付を挿入できるようにしてから、次を発行してみてください。

UPDATE
    table_name
SET
    date_start = '1970-01-01 00:00:00'
WHERE
    date_start = '0000-00-00 00:00:00'
于 2010-09-08T15:57:19.017 に答える