2011-12-12 10 views
9

Sto cercando di importare un file CSV in una tabella di database MySQL. Le file CSV simile al seguente:Come sfuggire le virgole all'interno dei valori CSV quando si importa la tabella in 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... 

Come si può vedere, i campi sono racchiusi tra virgolette e separati da virgole. Tuttavia, alcune righe hanno le virgole all'interno dei valori in questo modo (si noti l'ultimo valore):

"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" 

Ecco come il mio istruzione import si presenta come:

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

Ma non funziona come previsto. Ad esempio, la riga prima inserita ha una colonna con il seguente valore:

Nassau-Suffolk, NY""00501 

invece avrebbe dovuto essere:

Nassau-Suffolk, NY 

e 00501 avrebbe dovuto essere inserito come primo valore colonna nella riga successiva .

Come regolare il mio SQL per funzionare correttamente?

risposta

16

Dal MySQL Reference Manual, utilizzate le seguenti opzioni invece:

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

aggiornamento per abbinare il vostro uso, ma la parte importante è far cadere il OPTIONALLY da OPTIONALLY ENCLOSED BY.

+0

grazie, funziona perfettamente. – TKpop

+0

Come possiamo ottenere questo risultato in una procedura memorizzata, poiché 'LOAD DATA' non è consentito negli SP? – Sawant

Problemi correlati