La instrucción MySQL LOAD DATA carga valores del archivo por posición , no por su nombre.
MySQL no tiene ningún requisito sobre los "nombres" de los campos (desde la línea de encabezado en el archivo .csv) que "coinciden" con los nombres de las columnas. (Es posible que algún otro componente de su sistema tenga ese tipo de requisito, pero MySQL LOAD DATA no).
Es válido que un archivo .csv no tenga una línea de encabezado. Cuando hay una línea de encabezado, normalmente la "saltamos" usando IGNORE 1 LINES
.
Aparte, prefiero usar la palabra clave FIELDS
en la instrucción LOAD DATA en lugar de COLUMNS
.
En MySQL, los identificadores (nombres de columnas, nombres de tablas) se pueden escapar usando caracteres de acento grave. Para usar un identificador que incluya caracteres no válidos, como un espacio, el identificador debe tener escape.
CREATE TABLE ...
...
`Rec Open Date` DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
En mi teclado, el acento grave es la tecla en la esquina superior izquierda ` ~ justo a la izquierda de 1 ! clave.
ANSI_QUOTES
Si sql_mode
la variable incluye ANSI_QUOTES
, entonces también puede usar comillas dobles para escapar de los identificadores. por ejemplo
SHOW VARIABLES LIKE 'sql_mode' ;
SET sql_mode = 'ANSI_QUOTES,...' ;
SHOW VARIABLES LIKE 'sql_mode'
Variable_name Value
------------- -----------
sql_mode ANSI_QUOTES
Entonces:
CREATE TABLE ...
...
"Rec Open Date" DATE NOT NULL COMMENT 'Rec Open Date',
^ ^
Si sql_mode
no incluir ANSI_QUOTES
(ya sea explícitamente o incluido en alguna otra configuración), entonces las comillas dobles alrededor de los identificadores no funcionan. Y el uso de comillas simples alrededor de los identificadores nunca debería funcionar... las comillas simples encierran cadenas literales.
La conclusión:use caracteres de acento grave para escapar de los identificadores (nombres de columnas, nombres de tablas, etc.) y use comillas simples alrededor de los literales de cadena. Evite el uso de comillas dobles alrededor de los literales de cadena, para que su código SQL funcione incluso cuando ANSI_QUOTES está configurado.