Pernyataan MySQL LOAD DATA memuat nilai dari file berdasarkan posisi , bukan dengan nama.
MySQL tidak memiliki persyaratan apa pun tentang "nama" bidang (dari baris header di file .csv) "cocok" dengan nama kolom apa pun. (Mungkin beberapa komponen lain dari sistem Anda memiliki persyaratan seperti itu, tetapi MySQL LOAD DATA tidak.)
Ini valid untuk file .csv yang tidak memiliki baris header. Ketika ada baris header, kita biasanya "melewatinya" menggunakan IGNORE 1 LINES
.
Sebagai tambahan, saya lebih suka menggunakan kata kunci FIELDS
dalam pernyataan LOAD DATA menggantikan COLUMNS
.
Di MySQL, pengidentifikasi (nama kolom, nama tabel) dapat diloloskan menggunakan karakter backtick. Untuk menggunakan pengenal yang menyertakan karakter yang tidak valid, seperti spasi, pengenal harus diloloskan.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Di keyboard saya, backtick adalah tombol di kiri atas ` ~ tepat di sebelah kiri 1 ! kunci.
ANSI_QUOTES
Jika sql_mode
variabel termasuk ANSI_QUOTES
, maka Anda juga dapat menggunakan tanda kutip ganda untuk menghindari pengenal. misalnya
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Kemudian:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Jika sql_mode
apakah tidak sertakan ANSI_QUOTES
(baik secara eksplisit atau disertakan dalam beberapa pengaturan lain), maka tanda kutip ganda di sekitar pengenal tidak berfungsi. Dan menggunakan tanda kutip tunggal di sekitar pengidentifikasi tidak akan pernah berhasil... tanda kutip tunggal menyertakan literal string.
Kesimpulannya:gunakan karakter backtick untuk menghindari pengidentifikasi (nama kolom, nama tabel, dll.) dan gunakan tanda kutip tunggal di sekitar literal string. Hindari penggunaan tanda kutip ganda di sekitar literal string, untuk membuat kode SQL Anda berfungsi bahkan ketika ANSI_QUOTES disetel.