Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql + mengimpor file dengan spasi di header kolom + cara menangani

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dalam urutan apa batasan ON DELETE CASCADE diproses?

  2. mysql dan indeks dengan lebih dari satu kolom

  3. Migrasi data BLOB dari MS SQL Server ke MySQL

  4. Bisakah AUTO_INCREMENT digunakan dengan aman dalam SEBELUM PEMICU di MySQL

  5. Kesalahan MySQL:Pengurutan dibatalkan