A instrução MySQL LOAD DATA carrega valores do arquivo por posição , não pelo nome.
O MySQL não tem nenhum requisito sobre os "nomes" dos campos (da linha de cabeçalho no arquivo .csv) "correspondendo" a nenhum nome de coluna. (É possível que algum outro componente do seu sistema tenha esse tipo de requisito, mas o MySQL LOAD DATA não.)
É válido para um arquivo .csv não ter uma linha de cabeçalho. Quando há uma linha de cabeçalho, normalmente "pulamos" usando
IGNORE 1 LINES
. Como aparte, prefiro usar a palavra-chave
FIELDS
na instrução LOAD DATA no lugar de COLUMNS
. No MySQL, identificadores (nomes de colunas, nomes de tabelas) podem ser escapados usando caracteres de acento grave. Para usar um identificador que inclua caracteres inválidos, como um espaço, o identificador deve ter um escape.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
No meu teclado, o backtick é a tecla no canto superior esquerdo ` ~ logo à esquerda do 1 ! chave.
ANSI_QUOTES
Se
sql_mode
variável inclui ANSI_QUOTES
, você também pode usar aspas duplas para escapar dos identificadores. por exemplo. SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Então:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Se
sql_mode
não inclua ANSI_QUOTES
(explicitamente ou incluído em alguma outra configuração), as aspas duplas em torno dos identificadores não funcionarão. E usar aspas simples em torno de identificadores nunca deve funcionar... aspas simples envolvem literais de string. O takeaway:use caracteres backtick para escapar identificadores (nomes de colunas, nomes de tabelas, etc.) e use aspas simples em torno de literais de string. Evite usar aspas duplas em literais de string, para fazer seu código SQL funcionar mesmo quando ANSI_QUOTES estiver definido.