web-dev-qa-db-ja.com

MySQL LOAD DATA INFILEエラーコード1366。不正な整数値: ''

CSVテーブルをリモートサーバーデータベースにアップロードしようとしましたが、エラーが発生しました。 RedHat LinuxディストリビューションではMySQLを使用しています。 mycsv.csvファイルは次のようになります。

aa,ProductDescription,country,potato,L,11/18/2013,N,05

bb,ProductDescription,country,tomato,L,12/31/9999,N,05

cc,ProductDescription,country,curry,M,01/01/2014,Y,05

dd,ProductDescription,country,spicy,V,05/01/2015,N,

ご覧のとおり、最後の行はコンマ "、"で終わり、フィールドはありません(空であり、このようにするか、NULLに変更できる場合はさらに優れています)。ただし、次のクエリを入力すると、

LOAD DATA INFILE "/home/mycsv.txt" 
INTO TABLE inbound.master_data  
FIELDS TERMINATED BY ','  
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n';

コマンドラインに次のエラーが表示される

エラーコード:1366。行4の列 'product_life_cycle'の整数値が正しくありません: ''

最後の行のカンマの後にnull値を設定する方法を誰かが知っていますか? (これが、テーブルをアップロードできない理由の問題だと思います)。事前にどうもありがとうございました。

テーブル定義:

CREATE TABLE master_data
  ( aa varchar(6) NOT NULL, 
    bb varchar(50) NOT NULL, 
    cc varchar(3) NOT NULL, 
    dd varchar(2) NOT NULL, 
    ee varchar(1) DEFAULT NULL, 
    ff varchar(20) NOT NULL, 
    gg varchar(1) NOT NULL, 
    hh int(11) DEFAULT NULL, 
    PRIMARY KEY (aa), 
    UNIQUE KEY aa_UNIQUE (aa) 
) ENGINE=InnoDB 
  DEFAULT CHARSET=latin1 ;
2
Sebas

NULLを設定するには、テーブルにnullを許可する必要があります。

Null /欠損値の場合にデフォルト値に変更する場合は、以下のように個々の列名を指定する必要があります。

LOAD DATA INFILE "/home/mycsv.txt" 
INTO TABLE inbound.master_data
FIELDS TERMINATED BY ','  
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
    (name,proddescr,country,thing,charA,datecol,charB,@VAL)
    set numberCol=if(@VAL is null, 0, @VAL);

その0を他のデフォルト値に変更できます。

このブログ投稿には、他にも多くの興味深い データシナリオのロード が含まれています。 (コメントも確認してください)。

3
mysql_user

わかりました、あなたの助けに感謝します。最後の列を "varchar(10)"に設定するだけで問題を解決できました。整数列は空白値を受け入れることができないことがわかります。

0
Sebas