sql >> Base de Datos >  >> RDS >> Mysql

mysql + importar un archivo con espacios en los encabezados de columna + cómo manejar

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.