- Home
- Categorie
- Coding e Sistemistica
- PHP
- LOAD DATA INFILE e doppi apici
-
LOAD DATA INFILE e doppi apici
Con la funzione LOAD DATA INFILE lanciata da PHP sono riuscito a copiare velocemente il contenuto di un csv nel DB.
Il problema è che tutti i campi vengono copiati con i doppi apici, c'è un modo per evitarlo? Grazie
-
Come hai strutturato la query sql?
Struttura tipica:
LOAD DATA INFILE 'file.csv' INTO TABLE tabella FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
Ciao
-
LOAD DATA INFILE '".$file."' IGNORE INTO TABLE $tabella FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\n' IGNORE 1 LINES
Mi consigli di aggiungere \r in LINES TERMINATED?
-
Nel linguaggio C o C++ utilizzare "\n" oppure "\r\n" non cambia, più che altro è una forzatura per evitare problemi.
\r che significa "carriage return", obbliga a tornare all'inizio della linea, mentre \n che significa "newline", indica l'andata a capo.
Quindi con "\r\n" si obbliga al parser a leggere la successiva nuova linea dal carattere iniziale.
In base all'editor di testo ed il SO utilizzato, "\n" si comporta in modo diverso, quindi conviene utilizzare "\r\n".
Infine bisogna stare attenti alla codifica con cui viene salvato il file, sempre meglio utilizzare quelle standard come ANSI.
-
Potresti postare anche un esempio di come hai strutturato il file CSV
-
Non si tratta di un file specifico, ma devo riuscire a "digerire" la qualunque.
Cmq il mio problema è eliminare i doppi apici in fase di acquisizione, quindi "valore" dovrebbe essere memorizzato come valore (senza apici, appunto).
-
Ho fatto dei test, non mi da' problemi di virgolette.
Non è per caso che i campi della tabelle siano incompatibili con il flusso dati generato dalla query e, per risolvere le divergenze, vengano inserite le virgolette ad ogni valore, una sorta di conversione, esempio per trasformare un valore testo in stringa.Se vuoi posta la query che hai utilizzato per strutturare la tabella.
Nei test, ho utilizzato solo campi di tipo VARCHAR.Ciao
-
Appena risolto
Dovevo aggiungere
ENCLOSED BY '\"' ```Lo avevo aggiunto già prima ma sicuramente avevo fatto casini con backslash :x e non funzionava. Grazie a tutti per la collaborazione :ciauz: EDIT: Consiglio a tutti di utilizzare questa funzione di MySQL per caricare i csv nel DB, è molto più veloce che parserizzare il file in PHP e poi effettuare l'inserimento (pochi secondi anche per file di 14 mb).