2011-12-12 15 views
9

Estoy tratando de importar un archivo CSV en una tabla de base de datos MySQL. Las filas CSV ser similar al siguiente:¿Cómo escapar las comas dentro de los valores CSV al importar la tabla a MySQL?

"00602"," ","42042","15590","0","0","0","35","9","67","1978","20608","21434","3.1","54700","11384","31.3","30.4","32","18.382809","-67.186759","0","PR","Puerto Rico","U","","787","AGUADA","URB SAN CRISTOBAL","AGUADA","003","72","4","N","0060","","","10380","","Metro","Aguadilla-Isabela-San Sebastián PR","Aguadilla PR MSA","","","","N","0","0","0","0","","0","0","0","0","0","322569","0","","","5456","415","9577","V17136"," "," ","","" 
"00602"," ","42042","15590","0","0","0","35","9","67","1978","20608","21434","3.1","54700","11384","31.3","30.4","32","18.382809","-67.186759","0","PR","Puerto Rico","U","","787","AGUADA","COMUNIDAD LAS FLORES","AGUADA","003","72","4","N","0060","","","10380","","Metro","Aguadilla-Isabela-San Sebastián PR","Aguadilla PR MSA","","","","N","0","0","0","0","","0","0","0","0","0","322569","0","","","5456","415","9577","V17136"," "," ","","" 

etc... 

Como se puede ver, los campos se encierran entre comillas dobles y separados por comas. Sin embargo, algunas filas tienen comas dentro de los valores como la manera (nótese el último valor):

"00501"," ","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","40.81518","-73.0455","25","NY","New York","N","","631","HOLTSVILLE","I R S SERVICE CENTER","SUFFOLK","103","36","5","Y","5602","5380","408","35620","35004","Metro","New York-Northern New Jersey-Long Island NY-NJ-PA","New York-Northern New Jersey-Long Island","Nassau-Suffolk, NY PMSA","Northeast","Middle Atlantic","N","7","0","0","0","B","0","0","0","0","0","18640775","2807500","","","0","1","1","V13916","U"," ","New York-Newark-Bridgeport, NY-NJ-CT-PA","Nassau-Suffolk, NY" 

Así es como mi sentencia de importación se parece a:

LOAD DATA INFILE '/file.csv' 
REPLACE INTO TABLE zipcodes 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n'; 

Pero no está funcionando como se esperaba. Por ejemplo, la fila primera insertada tiene una columna con el valor siguiente:

Nassau-Suffolk, NY""00501 

lugar que debería haber sido:

Nassau-Suffolk, NY 

y 00501 debería haber sido insertado como el primer valor de la columna en la siguiente fila .

Cómo ajustar mi SQL para que funcione ¿no?

Respuesta

16

Desde el MySQL Reference Manual, utilice las siguientes opciones en su lugar:

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name 
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' 

Update para que coincida con su uso, pero lo importante es dejar caer el OPTIONALLY de OPTIONALLY ENCLOSED BY.

+0

gracias, funciona perfecto. – TKpop

+0

¿Cómo lo logramos en un procedimiento almacenado, ya que 'LOAD DATA' no está permitido en los SP? – Sawant

Cuestiones relacionadas