2012-09-07 26 views
7

Tôi muốn nhập tệp csv vào cơ sở dữ liệu MySQL của mình với HeidiSQL.Nhập HeidiSQL csv các trường trống

Nhưng một số trường của tôi trống.

Tôi có thể làm gì để cho HeidiSQL biết các giá trị trống này phải được xem là giá trị NULL?

Mẫu csv-file (2 lĩnh vực cuối cùng chưa biết):

NULL;Students Corner;437452182;; 

Tạo lệnh:

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

tôi nhận được những lỗi:

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

Bài đăng HIỂN THỊ TABLE và dòng mẫu từ CSV – rkosegi

+1

Bạn có thể làm điều đó bằng lệnh LOAD DATA INFILE với mệnh đề SET - thay thế chuỗi rỗng bằng giá trị NULL. – Devart

+0

Thay thế ;; bởi; NULL; trong CSV của bạn và thử lại. –

Trả lời

7

Nếu đã giải quyết bằng cách viết \ N trong mỗi trường trống thay vì viết NULL!

+1

tốt. đừng quên chấp nhận câu trả lời của bạn nếu câu trả lời bạn đã sử dụng. Tôi vẫn muốn nói rằng giải pháp truy vấn 'LOAD DATA INFILE' là tốt hơn, bởi vì một trong những alwawys không có tùy chọn để xử lý trước một tệp CSV trước khi nhập nó. Viết truy vấn cho phép bạn đặt tất cả logic đó vào một tập lệnh duy nhất, có nghĩa là lần sau bạn chỉ có thể chạy nó dưới dạng một lệnh duy nhất và không phải lo lắng về việc kiểm tra nội dung của tệp. – SDC

+0

Vâng, bạn hoàn toàn đúng! Cảm ơn đã giúp đỡ! – francisMi

+1

Wow, câu trả lời này là một phao cứu sinh! Tôi đã cố gắng để nhập một tập tin CSV rất lớn (200k hàng và 34 cột), và nó đã được lái xe tôi điên cho ném tôi lỗi và cảnh báo về giá trị NULL. Có vẻ như sử dụng '\ N' thay cho' NULL' hoặc chỉ là một trường trống làm việc ma thuật! :) – Terry

5

Bạn có thể nhập Tệp CSV vào MySQL bằng truy vấn LOAD DATA INFILE.

Trong trường hợp của bạn, bạn sẽ viết một cái gì đó như thế này:

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) 

(bạn có thể cần phải điều chỉnh này, tùy thuộc vào cuối lại đánh dấu dòng, vv, nhưng điều này nên được khá gần với những gì bạn cần)

Các vấn đề liên quan