- 1 1. Cosa potrai fare in questo articolo
- 2 2. Tipi di importazioni MySQL e quando usarli
- 3 3. Importazione di un file SQL (Il percorso più veloce verso il successo)
- 4 4. Importazione CSV (Più importante: più veloce con LOAD DATA)
- 4.1 4.1 Prima: prerequisiti CSV
- 4.2 4.2 Formato base pronto per copia-incolla (CSV con intestazione)
- 4.3 4.3 Importa solo le colonne di cui hai bisogno
- 4.4 4.4 Converti date e tipi durante l’importazione
- 4.5 4.5 Per file delimitati da tabulazione (TSV)
- 4.6 4.6 Migliora ulteriormente le prestazioni (per grandi quantità di dati)
- 4.7 ✔ Forma pratica consigliata
- 5 5. I 4 motivi principali per cui INFILE fallisce (Sezione più importante)
- 6 6. Importazione via GUI (Workbench / phpMyAdmin)
- 7 7. Risoluzione dei problemi (Per errore: causa → correzione più rapida)
- 8 8. Tecniche pratiche per grandi dataset (operazioni a prova di errore)
- 8.1 8.1 Dividi il file e importa a fasi
- 8.2 8.2 Disabilitare temporaneamente indici e chiavi esterne
- 8.3 8.3 Controllare autocommit (accelerare)
- 8.4 8.4 Impostazioni consigliate per caricamenti bulk
- 8.5 8.5 Aumentare i timeout
- 8.6 8.6 Strategia della tabella di staging (operazioni sicure)
- 8.7 ✔ Modello reale più stabile
- 8.8 ✔ Conclusione per grandi dati
- 9 9. FAQ (Domande comuni)
- 9.1 Q1. Posso importare solo colonne specifiche da un CSV?
- 9.2 Q2. Come trattare le celle vuote come NULL?
- 9.3 Q3. Come saltare la riga di intestazione?
- 9.4 Q4. Come posso convalidare i risultati dell’importazione?
- 9.5 Q5. Qual è il metodo più veloce?
- 9.6 Q6. Ricevo un errore di fine riga su Windows
- 9.7 Q7. Ricevo un errore secure_file_priv
- 9.8 ✔ Riepilogo FAQ
- 10 10. Riepilogo
1. Cosa potrai fare in questo articolo
Molte persone che cercano “MySQL data import” si trovano in una situazione in cui vogliono:
- “ripristinare un file .sql”
- “importare un CSV”
- “si interrompe con un errore”
- “non funziona in Workbench o phpMyAdmin”
In altre parole, vuoi una soluzione che puoi applicare subito.
Prima di tutto, ecco i percorsi di “successo” più brevi per obiettivo.
🔹 Comando più veloce per importare un file SQL (.sql)
Per il ripristino di backup o la migrazione del server, questo è il più rapido.
mysql -u username -p database_name < backup.sql
Cose da verificare in anticipo
- Il database di destinazione esiste?
- L’utente di connessione ha i privilegi per il DB di destinazione?
- La codifica del file SQL (di solito UTF-8)
Se il database non è ancora stato creato:
CREATE DATABASE example_db;
🔹 Modo più veloce per importare un file CSV (consigliato)
Per importare grandi quantità di dati rapidamente, LOAD DATA è ideale.
LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');
Punti chiave
- Fine riga Windows →
'\r\n' - Se c’è una riga di intestazione →
IGNORE 1 LINES - Converti stringhe vuote in NULL →
NULLIF() - Molti ambienti richiedono LOCAL (spiegato più avanti)
🔹 Se vuoi importare tramite GUI
MySQL Workbench
- Server → Importazione dati → seleziona un file → esegui
phpMyAdmin
- Seleziona il DB di destinazione → Importa → scegli un file → esegui
⚠ Tuttavia, per file di grandi dimensioni e una gestione degli errori affidabile, la CLI (riga di comando) è più affidabile.
🔹 3 elementi da verificare prima di importare
1. Set di caratteri (più importante)
SHOW VARIABLES LIKE 'character_set%';
Consigliato: utf8mb4
2. Impostazioni che causano errori legati a INFILE
SHOW VARIABLES LIKE 'local_infile';
SHOW VARIABLES LIKE 'secure_file_priv';
3. Controllo dei privilegi
SHOW GRANTS FOR 'user'@'localhost';
✔ Cosa segue in questo articolo
- Metodi dettagliati per importare file SQL
- Tecniche pratiche di importazione CSV
- Una spiegazione completa del perché INFILE fallisce
- Correzioni più rapide per tipo di errore
- Tecniche reali per grandi set di dati

2. Tipi di importazioni MySQL e quando usarli
Esistono diversi modi per importare in MySQL, ma la scelta migliore dipende dal tuo caso d’uso.
Se lo comprendi correttamente, puoi evitare problemi inutili.
2.1 Quando importare un dump SQL (.sql)
Casi d’uso comuni
- Ripristino da un backup
- Migrazione del server
- Applicare dati simili a quelli di produzione in un ambiente di sviluppo
- Reimportare dati esportati con
mysqldump
Caratteristiche
- Ripristina l’intera struttura delle tabelle + dati
- Alta riproducibilità
- Può includere transazioni
- Generalmente l’opzione più sicura
Metodi tipici
mysql -u user -p dbname < dump.sql
Oppure all’interno di MySQL:
SOURCE /path/to/dump.sql;
Ideale per
- Ripristino completo di un DB esistente
- Ricostruzione di un ambiente di produzione
- Caricamento dati per ambienti CI/CD
2.2 Quando importare CSV / TSV
Casi d’uso comuni
- Ricevere dati da sistemi esterni
- Importare dati Excel
- Processo ETL
- Aggiornare solo tabelle specifiche
Caratteristiche
- Carica solo i dati (lo schema deve esistere separatamente)
- Veloce (
LOAD DATAè estremamente veloce) - Consente logica di trasformazione durante l’importazione
Metodo tipico
LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
Ideale per
- Job batch programmati
- Integrazione dati
- Ingestione ad alta velocità di grandi quantità di righe
2.3 Quando usare strumenti GUI
Strumenti comuni:
- MySQL Workbench
- phpMyAdmin
Caratteristiche
- Operazione intuitiva
- Facile per i principianti
- Adatto a piccoli set di dati
Attenzioni
- Limiti di upload (phpMyAdmin)
- Timeout
- Instabile con dati di grandi dimensioni
- Più difficile analizzare gli errori
2.4 Confronto per metodo (punto di vista pratico)
| Method | Speed | Stability | Large-file support | Error analysis | Recommendation |
|---|---|---|---|---|---|
| mysql command | ◎ | ◎ | ◎ | ◎ | ★★★★★ |
| LOAD DATA | ◎ | ○ | ◎ | ○ | ★★★★★ |
| Workbench | ○ | ○ | △ | △ | ★★★ |
| phpMyAdmin | △ | △ | × | △ | ★★ |
✔ Scelte consigliate nel lavoro reale
- Ripristino backup → comando mysql
- Importazione CSV ad alta velocità → LOAD DATA LOCAL INFILE
- Compiti piccoli e una tantum → GUI
Se non sei sicuro, scegliere la CLI (riga di comando) è l’opzione più stabile.
3. Importazione di un file SQL (Il percorso più veloce verso il successo)
Importare un file .sql è il metodo più comune per i ripristini di backup e le migrazioni di server.
Qui, l’obiettivo è “riuscire il più rapidamente possibile”, quindi ci concentreremo solo sui passaggi pratici usati nel lavoro reale.
3.1 Ripristino in una riga (il metodo più comune)
Questo è il metodo più affidabile e veloce.
mysql -u username -p database_name < backup.sql
Dopo averlo eseguito, ti verrà chiesta la password.
✔ Controlli preliminari (per prevenire errori)
① Il database esiste?
SHOW DATABASES;
Se non esiste:
CREATE DATABASE example_db;
② L’utente ha i privilegi?
SHOW GRANTS FOR 'user'@'localhost';
Se i privilegi mancano:
GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
③ Codifica del file
Di solito è UTF-8.
Se vedi caratteri illeggibili, specifica esplicitamente.
mysql --default-character-set=utf8mb4 -u user -p dbname < backup.sql
3.2 Esegui dall’interno di MySQL (comando SOURCE)
Questo metodo viene eseguito dopo aver effettuato l’accesso a MySQL.
mysql -u user -p
USE example_db;
SOURCE /path/to/backup.sql;
Quando è utile
- Quando vuoi eseguire solo una parte di un file SQL
- Quando vuoi identificare la posizione esatta dell’errore
- Quando vuoi confermare visivamente il registro di esecuzione
3.3 Errori comuni e soluzioni
❌ ERRORE 1049: Database sconosciuto
→ Il DB non esiste
→ Esegui CREATE DATABASE
❌ ERRORE 1045: Accesso negato
→ Privilegi insufficienti
→ Controlla con SHOW GRANTS
❌ Si interrompe a metà / posizione dell’errore non chiara
Soluzione:
- Controlla l’inizio e la fine del file
head backup.sql tail backup.sql
- Controlla le righe subito prima dell’errore
- Se il file è grande, dividilo ed eseguilo in parti
split -l 10000 backup.sql part_
3.4 Consigli per stabilizzare grandi importazioni SQL
① Controlla le impostazioni di transazione
Verifica se è incluso SET autocommit=0;
② Se i vincoli di chiave esterna sono il problema
SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;
③ Controlla la modalità SQL
SELECT @@sql_mode;
La modalità strict potrebbe influire sull’importazione.
✔ Raccomandazioni pratiche
- Ripristino in produzione → comando mysql
- Debug → SOURCE
- File grandi → CLI + considera di dividere
4. Importazione CSV (Più importante: più veloce con LOAD DATA)
Quando si importano dati CSV, il metodo più veloce e pratico è LOAD DATA.
Per grandi set di dati, è di gran lunga più veloce rispetto alle istruzioni INSERT.
Qui, forniremo il formato corretto “copia-incolla ed esegui” e evidenzieremo i punti di errore comuni.
4.1 Prima: prerequisiti CSV
Prima di importare, assicurati di verificare quanto segue.
✔ Delimitatore
- Virgola
, - Tabulazione
\t - Punto e virgola
;(comune nei dati esteri)
✔ Carattere di citazione
- Se i valori sono racchiusi, ad esempio
"valore"con doppi apici
✔ Terminatori di riga
- Linux / Mac →
\n - Windows →
\r\n
✔ Set di caratteri / codifica
- Consigliato:
utf8mb4 - CSV creato su Windows può essere Shift-JIS
- UTF-8 con BOM a volte può causare errori
Esempio di verifica:
file -i example.csv
4.2 Formato base pronto per copia-incolla (CSV con intestazione)
LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');
Significato di ogni opzione
LOCALLegge un file dal lato client (necessario in molti ambienti)IGNORE 1 LINESSalta la riga di intestazione@ageUna variabile temporanea usata per trasformare il valore prima di memorizzarloNULLIF()Converte stringhe vuote in NULL
4.3 Importa solo le colonne di cui hai bisogno
Se il CSV ha colonne non necessarie:
LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);
Mappa le colonne indesiderate a @dummy.
4.4 Converti date e tipi durante l’importazione
Esempio: converti MM/DD/YYYY → formato MySQL
LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@date_col, name)
SET date_col = STR_TO_DATE(@date_col, '%m/%d/%Y');
4.5 Per file delimitati da tabulazione (TSV)
FIELDS TERMINATED BY '\t'
4.6 Migliora ulteriormente le prestazioni (per grandi quantità di dati)
Disabilita temporaneamente gli indici
ALTER TABLE example_table DISABLE KEYS;
-- Run LOAD DATA
ALTER TABLE example_table ENABLE KEYS;
Disabilita temporaneamente le chiavi esterne
SET FOREIGN_KEY_CHECKS=0;
-- Run LOAD DATA
SET FOREIGN_KEY_CHECKS=1;
Perché LOCAL è spesso necessario
LOAD DATA INFILE→ legge un file sul lato serverLOAD DATA LOCAL INFILE→ legge un file sul lato client
In molti ambienti, usare LOCAL ha una percentuale di successo più alta.
✔ Forma pratica consigliata
Nella maggior parte dei casi:
LOAD DATA LOCAL INFILE
+ explicit delimiter
+ explicit line endings
+ IGNORE 1 LINES
+ type conversion
Questo è l’approccio più stabile.
5. I 4 motivi principali per cui INFILE fallisce (Sezione più importante)
La maggior parte dei fallimenti di LOAD DATA INFILE è causata da impostazioni, privilegi o incomprensione della posizione della sorgente.
Se comprendi questo, puoi risolvere immediatamente la maggior parte degli errori.
5.1 Differenza tra INFILE e LOCAL INFILE
Questo è il concetto base fondamentale.
| Command | Where it reads from | Typical use |
|---|---|---|
LOAD DATA INFILE | File on the server | A fixed path on the server |
LOAD DATA LOCAL INFILE | File on the client | A CSV on your local PC |
Malintesi comuni
- Tentare di leggere un file locale del PC con
INFILEe fallire - Il file non esiste sul server
✔ Regola pratica
- CSV sul tuo PC →
LOCAL - CSV posizionato sul server →
INFILE
Se non sei sicuro, usare LOCAL è la scelta più sicura.
5.2 local_infile è disabilitato (causa dell’ERRORE 1148)
Esempio di errore:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Causa:
local_infile è DISATTIVATO
✔ Controlla l’impostazione corrente
SHOW VARIABLES LIKE 'local_infile';
✔ Abilitalo durante la connessione (lato client)
mysql --local-infile=1 -u user -p
✔ Abilitalo permanentemente (file di configurazione)
Aggiungi a my.cnf o my.ini:
[mysqld]
local_infile=1
Devi riavviare il server.
5.3 Restrizione secure_file_priv
Questo si verifica quando si usa LOAD DATA INFILE (senza LOCAL).
Controlla:
SHOW VARIABLES LIKE 'secure_file_priv';
Esempio di output
/var/lib/mysql-files/
→ Puoi leggere solo file all’interno di questa directory.
✔ Correzione
- Sposta il CSV nella directory consentita
- Oppure usa
LOCAL
5.4 Privilegi insufficienti (privilegio FILE / permessi OS)
Esempio di errore:
ERROR 1045: Access denied
Controlla:
SHOW GRANTS FOR 'user'@'localhost';
✔ Privilegio richiesto
GRANT FILE ON *.* TO 'user'@'localhost';
※ Per motivi di sicurezza, operare con i privilegi minimi possibili.
5.5 Specifica del percorso errata
- Usa un percorso assoluto, non relativo
- Su Windows, è consigliato
C:/path/file.csv - Le barre oblique (/) sono più sicure delle barre rovesciate ()
✔ Flusso rapido di risoluzione per problemi INFILE
- Hai aggiunto
LOCAL? SHOW VARIABLES LIKE 'local_infile';SHOW VARIABLES LIKE 'secure_file_priv';- Controlla i privilegi (SHOW GRANTS)
- Controlla il percorso (percorso assoluto)
In quest’ordine, puoi risolvere la maggior parte dei casi.
6. Importazione via GUI (Workbench / phpMyAdmin)
La riga di comando è la più stabile, ma ci sono situazioni in cui si desidera utilizzare strumenti GUI.
Qui ci concentreremo sui punti comuni in cui le persone si bloccano nel lavoro reale.
6.1 Importazione con MySQL Workbench
Importa un file SQL (ripristino backup)
- Avvia Workbench
- Menu → Server → Importazione dati
- Seleziona “Importa da file auto‑contenuto”
- Seleziona il file
.sql - Seleziona lo Schema di destinazione (database)
- Clicca “Avvia importazione”
Importa CSV (per tabella)
- Fai clic con il tasto destro sulla tabella di destinazione
- Seleziona Wizard di importazione dati tabella
- Seleziona il file CSV
- Imposta il delimitatore e se è presente un’intestazione
- Esegui
⚠ Motivi comuni per cui Workbench si blocca
- File di grandi dimensioni (centinaia di MB o più)
- Timeout
- Incompatibilità di codifica
- Restrizioni
secure_file_priv
👉 Per file di grandi dimensioni o ambienti di produzione, si consiglia la CLI.
6.2 Importazione con phpMyAdmin
Passaggi
- Seleziona il database di destinazione
- Apri la scheda “Importa”
- Scegli un file
- Seleziona il formato (SQL / CSV)
- Esegui
⚠ Limitazioni di phpMyAdmin
① Limite dimensione upload
upload_max_filesize
post_max_size
I file di grandi dimensioni falliranno.
② Timeout
max_execution_timeImportazioni di lunga durata possono fermarsi a metà.
③ Memoria esaurita
memory_limit6.3 Quando dovresti usare la GUI
- Set di dati piccoli (pochi MB)
- Ambienti di sviluppo
- Lavori temporanei una tantum
6.4 Quando dovresti usare la CLI (consigliato)
- Ambienti di produzione
- Decine di MB o più
- Importazioni CSV di grandi dimensioni
- Quando è necessaria l’analisi degli errori
- Migrazioni server‑to‑server
✔ Conclusione pratica
La GUI è “facile”, ma
la CLI è di gran lunga migliore per stabilità, riproducibilità e gestione di file di grandi dimensioni.
Per la risoluzione dei problemi, si consiglia infine di imparare le operazioni con la CLI.
7. Risoluzione dei problemi (Per errore: causa → correzione più rapida)
La maggior parte degli errori di importazione MySQL è altamente ricorrente.
Qui li organizzeremo nell’ordine “causa → prima azione → comando di verifica”.
7.1 ERRORE 1148 (42000)
Il comando usato non è consentito con questa versione di MySQL
🔎 Causa
LOAD DATA LOCAL INFILEè disabilitatolocal_infileè OFF
✅ Correzione più rapida
① Controlla le impostazioni attuali
SHOW VARIABLES LIKE 'local_infile';
② Abilita durante la connessione (lato client)
mysql --local-infile=1 -u user -p
③ Abilita permanentemente (se necessario)
[mysqld]
local_infile=1
→ Riavvia MySQL
7.2 ERRORE 1366
Valore stringa non corretto
🔎 Causa
- Incompatibilità di codifica
- Incoerenza tra utf8 e utf8mb4
- Presenza di Shift-JIS
✅ Correzione più rapida
① Controlla il set di caratteri attuale
SHOW VARIABLES LIKE 'character_set%';
② Converti la tabella a utf8mb4
ALTER TABLE example_table CONVERT TO CHARACTER SET utf8mb4;
③ Specifica esplicitamente al momento dell’importazione
mysql --default-character-set=utf8mb4 -u user -p db < file.sql
7.3 ERRORE 1062
Voce duplicata
🔎 Causa
- Chiavi primarie duplicate
- Violazione del vincolo UNIQUE
✅ Opzioni di correzione
Opzione 1: Ignora duplicati
LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE example_table
IGNORE;
Opzione 2: Aggiorna in caso di duplicato
INSERT INTO example_table (id, name)
VALUES (1,'John')
ON DUPLICATE KEY UPDATE name=VALUES(name);
Opzione 3: Usa una tabella di staging
CREATE TEMPORARY TABLE temp LIKE example_table;
-- LOAD into temp first
INSERT INTO example_table
SELECT * FROM temp;
7.4 ERRORE 1045
Accesso negato per l’utente
🔎 Causa
- Privilegi DB insufficienti
- Privilegio FILE insufficiente
- Permessi OS insufficienti per il percorso
✅ Controlla
SHOW GRANTS FOR 'user'@'localhost';
✅ Esempio di privilegi richiesti
GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
※ Fai attenzione quando concedi il privilegio FILE.
7.5 Si ferma a metà su file di grandi dimensioni
🔎 Causa
- Timeout
- Memoria esaurita
- Limiti PHP (phpMyAdmin)
✅ Contromisure più rapide
Aumentare i timeout
SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;
Dividi il file
split -l 100000 large.csv part_
✔ Flusso di risoluzione errori (più veloce)
- Verifica la codifica
- Verifica
local_infile - Verifica
secure_file_priv - Verifica i privilegi
- Verifica le terminazioni di riga (
\n/\r\n)
In quest’ordine, puoi risolvere la maggior parte dei problemi.
8. Tecniche pratiche per grandi dataset (operazioni a prova di errore)
Quando si importano centinaia di migliaia fino a milioni di righe, i metodi usuali possono essere lenti, fermarsi o interrompersi.
Ecco tecniche stabili comunemente usate in produzione.
8.1 Dividi il file e importa a fasi
Caricare un enorme CSV/SQL in un’unica volta può causare problemi di memoria e timeout.
✔ Linux / Mac
split -l 100000 large.csv part_
→ Dividi in 100.000 righe per parte
✔ Windows (esempio PowerShell)
Get-Content large.csv -TotalCount 100000 > part_1.csv
✔ Vantaggi delle importazioni a fasi
- Più facile riprovare dopo un errore parziale
- Più facile individuare la posizione dell’errore
- Carico del server più stabile
8.2 Disabilitare temporaneamente indici e chiavi esterne
Durante l’importazione, gli aggiornamenti degli indici spesso diventano il collo di bottiglia.
✔ Disabilitare temporaneamente gli indici
ALTER TABLE example_table DISABLE KEYS;
-- LOAD DATA
ALTER TABLE example_table ENABLE KEYS;
※ Principalmente per MyISAM. Effetto limitato per InnoDB.
✔ Disabilitare le chiavi esterne
SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;
8.3 Controllare autocommit (accelerare)
SET autocommit=0;
-- LOAD DATA
COMMIT;
SET autocommit=1;
8.4 Impostazioni consigliate per caricamenti bulk
SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
SET AUTOCOMMIT=0;
Dopo l’importazione:
COMMIT;
SET UNIQUE_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1;
SET AUTOCOMMIT=1;
⚠ Usa con cautela in produzione.
8.5 Aumentare i timeout
SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;
8.6 Strategia della tabella di staging (operazioni sicure)
Invece di importare direttamente nella tabella di produzione, usa prima una tabella di validazione.
CREATE TABLE staging LIKE example_table;
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE staging;
Dopo la validazione:
INSERT INTO example_table
SELECT * FROM staging;
✔ Modello reale più stabile
- Carica in una tabella di staging
- Verifica il conteggio delle righe
- Convalida i vincoli
- Applica alla produzione
- Salva i log
✔ Conclusione per grandi dati
- Usa la CLI quando possibile
- Dividi le importazioni
- Passa per lo staging
- Disabilita temporaneamente i vincoli
- Controlla i log
Questo manterrà le importazioni stabili anche con milioni di righe.
9. FAQ (Domande comuni)
Ecco risposte rapide e pratiche alle domande più cercate sull’importazione MySQL.
Q1. Posso importare solo colonne specifiche da un CSV?
Sì, puoi.
Puoi mappare le colonne non necessarie a una variabile (come @dummy) e ignorarle.
LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);
Se vuoi solo alcune colonne, assicurati di specificare esplicitamente l’ordine delle colonne.
Q2. Come trattare le celle vuote come NULL?
Usa NULLIF().
LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(name, @age)
SET age = NULLIF(@age,'');
Questo converte le stringhe vuote (”) in NULL.
Q3. Come saltare la riga di intestazione?
IGNORE 1 LINES
Esempio:
LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Q4. Come posso convalidare i risultati dell’importazione?
✔ Verifica il conteggio delle righe
SELECT COUNT(*) FROM example_table;
✔ Verifica avvisi/errore
Controlla gli avvisi MySQL:
SHOW WARNINGS;
✔ Strategia della tabella di staging (raccomandata)
Carica prima in una tabella di staging, poi applica alla produzione.
Q5. Qual è il metodo più veloce?
Conclusione:
- CSV → LOAD DATA LOCAL INFILE (più veloce)
- Ripristino backup → comando mysql
L’interfaccia grafica è comoda, ma la CLI vince per velocità e stabilità.
Q6. Ricevo un errore di fine riga su Windows
È dovuto ai caratteri di fine riga.
Windows:
LINES TERMINATED BY '\r\n'
Linux / Mac:
LINES TERMINATED BY '\n'
Q7. Ricevo un errore secure_file_priv
Verifica:
SHOW VARIABLES LIKE 'secure_file_priv';
Correzione:
- Metti il CSV nella directory consentita
- Oppure usa
LOCAL
✔ Riepilogo FAQ
- Mappatura colonne →
@dummy - Conversione NULL →
NULLIF - Ignora intestazione →
IGNORE 1 LINES - Importazione ad alta velocità →
LOAD DATA - Principali punti “bloccanti” →
local_infile/secure_file_priv/ codifica
10. Riepilogo
Le importazioni MySQL possono sembrare complesse inizialmente, ma
una volta organizzate per obiettivo, sono molto semplici.
Ricapitoliamo i percorsi di successo più brevi.
✔ Ripristinare un file SQL (.sql)
Il più veloce e stabile:
mysql -u user -p dbname < backup.sql
- Verifica se il DB esiste
- Verifica i privilegi
- Consiglia
utf8mb4per la codifica
✔ Importare CSV (veloce)
Forma base:
LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Punti chiave:
- Fine riga Windows →
\r\n - Stringhe vuote →
NULLIF() - Se fallisce, verifica
local_infile
✔ Ordine di verifica per il troubleshooting
- Codifica (consiglia utf8mb4)
SHOW VARIABLES LIKE 'local_infile';SHOW VARIABLES LIKE 'secure_file_priv';- Privilegi (SHOW GRANTS)
- Fine riga
In quest’ordine, puoi risolvere la maggior parte dei problemi.
✔ Regole d’oro per grandi dataset
- Usa la CLI
- Dividi le importazioni
- Passa attraverso una tabella di staging
- Disabilita temporaneamente chiavi esterne/constraint
- Controlla i log
✔ Conclusione finale
- Ripristino backup → comando mysql
- Importazione CSV ad alta velocità → LOAD DATA LOCAL INFILE
- Piccoli compiti occasionali → GUI
Se non sei sicuro, usare la CLI è la scelta più stabile.
Con questo, ora disponi di un set completo di conoscenze per le importazioni MySQL.
Provalo nel tuo ambiente e costruisci un flusso di lavoro operativo stabile.


