MySQL LOAD DATAステートメントは、ファイルから位置ごとに値をロードします。 、名前ではありません。
MySQLには、(。csvファイルのヘッダー行からの)フィールドの「名前」について、列名と「一致する」という要件はありません。 (システムの他のコンポーネントにそのタイプの要件がある可能性がありますが、MySQL LOAD DATAにはありません。)
.csvファイルにヘッダー行がないことは有効です。ヘッダー行がある場合、通常はIGNORE 1 LINES
を使用して「スキップ」します。 。
余談ですが、私はキーワードFIELDS
を使用することを好みます COLUMNS
の代わりにLOADDATAステートメントで 。
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
次に:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
sql_mode
の場合 しない ANSI_QUOTES
を含める (明示的に、または他の設定に含まれている場合)、識別子の前後の二重引用符は機能しません。また、識別子を一重引用符で囲むことはできません...一重引用符で文字列リテラルを囲みます。
要点:バックティック文字を使用して識別子(列名、テーブル名など)をエスケープし、文字列リテラルを一重引用符で囲みます。 ANSI_QUOTESが設定されている場合でもSQLコードを機能させるために、文字列リテラルを二重引用符で囲むことは避けてください。