2016-04-13 7 views
0

私はmysqlにインポートしたいcsvファイルを持っています。mysql +列ヘッダーにスペースを含むファイルをインポートする+処理方法

私はLOAD DATA INFILEを使用しようとしていますが、まずテーブルを作成しなければなりません。これが私の問題です。

私はインポートしようとしていますfile.csvになり、このようになります(ただし、それだけでこの例では1列に「録音オープン日」があります):今、私はテーブル内の列ヘッダーを希望

をこれはcsvファイルと同じにすることができますが、私はこれをEG1とEG2で以下に示す "or"を使って動作させることはできません。 これを動作させる方法は、スペースをテーブルのアンダースコアつまり、 "Rec Open Date"は "Rec_Open_Date"になりますが、これはcsvファイルの列ヘッダー名を変更することになります。つまり、スペースをテーブルヘッダーの下線で置き換えてください。他の賢明な人にアドバイスする?理想的には私はcsvファイルの列見出しがデータテーブルの見出しと同じで、EG3がこれを実現する方法のようです。

EG1:私は、次の操作を行いますテーブルを作成EG3次

mysql> CREATE TABLE IF NOT EXISTS test1234 (
    -> id int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key', 
    -> Rec_Open_Date Date NOT NULL COMMENT 'Rec Open Date', 
    -> PRIMARY KEY (id) 
    ->) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=64 ; 
Query OK, 0 rows affected (0.00 sec) 

mysql> 

NOTE 、が、列:

mysql> CREATE TABLE IF NOT EXISTS test1234 (
    -> id int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key', 
    -> 'Rec Open Date' Date NOT NULL COMMENT 'Rec Open Date', 
    -> PRIMARY KEY (id) 
    ->) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=64 ; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Rec Open Date' Date NOT NULL COMMENT 'Rec Open Date', 
    PRIMARY KEY (id) 
) ENGI' at line 3 
mysql> 

EG2

mysql> ^MCREATE TABLE IF NOT EXISTS test1234 (
    -> id int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key', 
    -> "Rec Open Date" Date NOT NULL COMMENT 'Rec Open Date', 
    -> PRIMARY KEY (id) 
    ->) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=64 ; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"Rec Open Date" Date NOT NULL COMMENT 'Rec Open Date', 
    PRIMARY KEY (id) 
) ENGI' at line 3 
mysql> 

EG3ファイル内のヘッダーはsでなければなりません私はそれを理解しているように、datatable上のものとしてame。

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE test1234 COLUMNS TERMINATED BY ',';

答えて

0

MySQLのLOAD DATA文の負荷値位置ことではなく、名前でファイルから。

MySQLには、.csvファイルのヘッダー行からのフィールドの「名前」について、任意の列名に「一致」する必要はありません。 (システムの他のコンポーネントには、そのタイプの要件がある可能性がありますが、MySQL LOAD DATAはそうではありません)。

.csvファイルにはヘッダ行がないことが有効です。ヘッダー行がある場合、通常はIGNORE 1 LINESを使用して「スキップ」します。

また、COLUMNSの代わりにLOAD DATAステートメントにキーワードFIELDSを使用することをお勧めします。


MySQLでは、識別子(列名、テーブル名)はバックティック文字を使用してエスケープすることができます。スペースのような無効な文字を含む識別子を使用するには、識別子をエスケープする必要があります。私のキーボードで

CREATE TABLE ... 
... 
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date', 
^   ^

、バッククォートはちょうど1の左側の左上`〜の鍵です!キー。


ANSI_QUOTES

sql_mode変数が、あなたはまた、識別子を逃れるために、二重引用符を使用することができ、ANSI_QUOTESが含まれている場合。例えばその後

SHOW VARIABLES LIKE 'sql_mode' ; 

SET sql_mode = 'ANSI_QUOTES,...' ; 

SHOW VARIABLES LIKE 'sql_mode' 

Variable_name Value   
------------- ----------- 
sql_mode  ANSI_QUOTES 

はないANSI_QUOTES(明示的または他のいくつかの設定に含まれている)含んでいます

CREATE TABLE ... 
... 
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date', 
^   ^

sql_mode場合、identifers周りに二重引用符では動作しません。そして、識別子の周りに一重引用符を使用すると、一重引用符は文字列リテラルを囲みません。


持ち帰り:識別子(などの列名、テーブル名を、)エスケープと文字列リテラルの周りの単一引用符を使用するためにバッククォート文字を使用します。 ANSI_QUOTESが設定されている場合でもSQLコードを動作させるために、文字列リテラルの前後に二重引用符を使用しないでください。

+0

TKSので、私は戻って使用することをjsutすることができますが、NOTはtest1234( IDはint(11)NOT NULL AUTO_INCREMENTコメントのプライマリキー '、 'レックオープンDate'日NOT NULLを存在する場合は、'のCREATE TABLE ''私のテーブルを作成するために、ダニCOMMENT = 'datatableデモテーブル' AUTO_INCREMENT = 64; '' ' – HattrickNZ

+0

どのようにして' LOAD DATA LOCAL INFILE 'ファイルをロードしますか? head_test_1col.csv 'INTO TABLE test1234 COLUMNS TERMINATED BY'、 ';'またはこれは 'LOAD DATA LOCAL INFILE'です。head_test_1col.csv 'INTO TABLE test1234'は機能しません。テーブルにすべてゼロが入っています – HattrickNZ

+0

"すべてゼロ"最初のフィールドのように、有効な数値ではありません。フィールド値が二重引用符で囲まれている場合LOAD DATAは、LOAD DATAステートメントに "OPTIONALLY ENCLOSED BY '"' "を含めると二重引用符を削除できます。MySQLは、日付フィールドがYYYY-MM-DDフォーマットであることを期待しています。 '@ udv2'のようなユーザ定義変数にフィールドをロードし、SET句の式を使用して値をDATEに変換することができます。たとえば、' \ 'Rec Open Date \' = STR_TO_DATE(@ udv2、 '%m/%d /%Y ') ' – spencer7593

関連する問題