Câu lệnh MySQL LOAD DATA tải các giá trị từ tệp theo vị trí , không phải bằng tên.
MySQL không có bất kỳ yêu cầu nào về "tên" của các trường (từ dòng tiêu đề trong tệp .csv) "khớp" với bất kỳ tên cột nào. (Có thể một số thành phần khác trong hệ thống của bạn có loại yêu cầu đó, nhưng MySQL LOAD DATA thì không.)
Tệp .csv không có dòng tiêu đề là hợp lệ. Khi có dòng tiêu đề, chúng tôi thường "bỏ qua" dòng tiêu đề đó bằng cách sử dụng IGNORE 1 LINES
.
Ngoài ra, tôi thích sử dụng từ khóa FIELDS
trong câu lệnh TẢI DỮ LIỆU thay cho COLUMNS
.
Trong MySQL, các số nhận dạng (tên cột, tên bảng) có thể được thoát ra bằng cách sử dụng các ký tự backtick. Để sử dụng số nhận dạng bao gồm các ký tự không hợp lệ, chẳng hạn như dấu cách, mã định danh phải được thoát ra.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Trên bàn phím của tôi, phím backtick là phím ở phía trên bên trái `~ ngay bên trái của 1! phím.
ANSI_QUOTES
Nếu sql_mode
biến bao gồm ANSI_QUOTES
, sau đó bạn cũng có thể sử dụng dấu ngoặc kép để thoát khỏi số nhận dạng. ví dụ:
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Sau đó:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Nếu sql_mode
không bao gồm ANSI_QUOTES
(hoặc rõ ràng hoặc được bao gồm trong một số cài đặt khác), thì dấu ngoặc kép xung quanh số nhận dạng không hoạt động. Và việc sử dụng các dấu ngoặc kép xung quanh các số nhận dạng sẽ không bao giờ hiệu quả ... các dấu ngoặc kép bao gồm các ký tự chuỗi.
Cách rút ra:sử dụng các ký tự backtick để thoát khỏi các số nhận dạng (tên cột, tên bảng, v.v.) và sử dụng các dấu ngoặc kép xung quanh các ký tự của chuỗi. Tránh sử dụng dấu ngoặc kép xung quanh các ký tự chuỗi để làm cho mã SQL của bạn hoạt động ngay cả khi ANSI_QUOTES được đặt.