2012-09-07 24 views
7

Voglio importare un file csv nel mio database MySQL con HeidiSQL.HeidiSQL importa campi vuoti csv

Ma alcuni dei miei campi sono vuoti.

Cosa posso fare per far sapere a HeidiSQL che questi valori vuoti devono essere considerati valori NULL?

Esempio di file CSV (ultimi 2 campi non ancora noti):

NULL;Students Corner;437452182;; 

creare comandi:

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`)); 

ottengo questi errori:

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

Post SHOW CREATE TABLE e linee di campionamento da CSV – rkosegi

+1

È possibile eseguire l'operazione utilizzando il comando LOAD DATA INFILE con la clausola SET - Sostituire stringhe vuote con valori NULL. – Devart

+0

Sostituire ;; da; NULL; nel tuo CSV e riprova. –

risposta

7

Se risolto, scrivendo \ N in ogni campo vuoto invece di scrivere NULL!

+1

va bene. non dimenticare di accettare la tua risposta se è quella che hai usato. Direi ancora che la soluzione di query 'LOAD DATA INFILE' è migliore, perché uno non ha ancora la possibilità di pre-elaborare un file CSV prima di importarlo. La scrittura della query consente di inserire tutta la logica in un singolo script, il che significa che la prossima volta è possibile eseguirlo come un singolo comando e non preoccuparsi di controllare il contenuto del file. – SDC

+0

Sì, hai assolutamente ragione! Grazie per l'aiuto! – francisMi

+1

Wow, questa risposta è un vero toccasana! Ho cercato di importare un enorme file CSV (200k righe e 34 colonne), e mi ha fatto impazzire per avermi lanciato errori e avvertimenti sui valori NULL. Sembra che usare '\ N' al posto di' NULL' o solo un campo vuoto abbia funzionato magicamente! :) – Terry

5

È possibile importare File CSV in MySQL utilizzando una query LOAD DATA INFILE.

Nel tuo caso, si può scrivere qualcosa di simile:

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) 

(potrebbe essere necessario regolare questo, a seconda del fine marcatori di linea, ecc, ma questo dovrebbe essere abbastanza vicino a quello che ti serve)

Problemi correlati