2012-09-07 184 views
7

Quiero importar un archivo csv a mi base de datos MySQL con HeidiSQL.HeidiSQL importar csv campos vacíos

Pero algunos de mis campos están vacíos.

¿Qué podría hacer para que HeidiSQL sepa que estos valores vacíos deben considerarse valores NULL?

Muestra de archivo csv (todavía no últimos 2 campos conocidos):

NULL;Students Corner;437452182;; 

crear comandos:

CREATE TABLE `db`.`customers` (
     `company_id` INT NOT NULL AUTO_INCREMENT , 
     `company_name` VARCHAR(40) NULL , 
     `company_number` INT NULL , 
     `company_vat` INT NULL , 
     `company_zip` INT NULL, 
    PRIMARY KEY (`company_id`)); 

Yo obtener estos errores:

Incorrect integer value: '' for column 'company_id' at row 1 */ 
    Incorrect integer value: '' for column 'company_vat' at row 1 */ 
    Incorrect integer value: '' for column 'company_zip' at row 1 */ 
    etc 
+0

Publicación MOSTRAR CREAR TABLA y líneas de muestra de CSV – rkosegi

+1

Puede hacerlo utilizando el comando LOAD DATA INFILE con la cláusula SET - reemplace cadenas vacías con valores NULL. – Devart

+0

Reemplazar ;; por; NULL; en tu CSV e intenta de nuevo. –

Respuesta

7

Si lo resolvió escribiendo \ N en cada campo vacío en lugar de escribir NULL!

+1

eso es bueno. no olvides aceptar tu respuesta si es la que utilizaste. Todavía diría que la solución de consulta 'LOAD DATA INFILE' es mejor, porque uno no siempre tiene la opción de preprocesar un archivo CSV antes de importarlo. Escribir la consulta le permite poner toda esa lógica en un solo script, lo que significa que la próxima vez puede simplemente ejecutarlo como un solo comando y no preocuparse por verificar el contenido del archivo. – SDC

+0

Sí, tienes toda la razón! ¡Gracias por la ayuda! – francisMi

+1

¡Guau, esta respuesta es un salvavidas total! He intentado importar un gran archivo CSV (200k filas y 34 columnas), y me ha estado volviendo loco por arrojarme errores y advertencias sobre los valores NULL. ¡Parece que usar '\ N' en lugar de' NULL' o simplemente un campo en blanco funcionaba mágicamente! :) – Terry

5

Puede importar Archivos CSV en MySQL usando una consulta LOAD DATA INFILE.

En su caso, podría escribir algo como esto:

LOAD DATA INFILE filename.txt 
INTO TABLE customers 
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY '\n' 
(@id, @name, @number, @vat, @zip) 
SET 
    company_id  = (CASE WHEN @id='' THEN NULL ELSE @id END), 
    company_name = (CASE WHEN @name='' THEN NULL ELSE @name END), 
    company_number = (CASE WHEN @number='' THEN NULL ELSE @number END), 
    company_vat = (CASE WHEN @vat='' THEN NULL ELSE @vat END), 
    company_zip = (CASE WHEN @zip='' THEN NULL ELSE @zip END) 

(es posible que tenga que ajustar esto, dependiendo de su final de marcadores de línea, etc, pero esto debe ser bastante cerca de lo que necesita)

Cuestiones relacionadas