2011-03-22 27 views
5

Tôi đang nhập CSV vào bảng MySQL với LOAD DATA INFILE. Một trong các trường của bảng lưu trữ dữ liệu mã zip, mà tôi đã xác định trong cấu trúc bảng contributor_zipcode INT.Giá trị mặc định cho các trường số nguyên trống khi nhập dữ liệu CSV trong MySQL

Trong CSV, trường này đôi khi trống. Khi tôi thực hiện truy vấn LOAD, MySQL sẽ ném một cảnh báo như:

Incorrect integer value: '' for column 'contributor_zipcode' at row 180

Tôi đã cố gắng xác định lại sân khi contributor_zipcode INT DEFAULT '0', mà tạo ra những cảnh báo tương tự, và contributor_zipcode INT DEFAULT NULL, mà MySQL sẽ không cho phép. Lời khuyên nào?

+0

bạn có thể gửi một dòng giả từ tệp CSV? – Stony

+0

'2004, urn: fec: giao dịch, indiv: 2004: 1902928,15,24020610238, f, 1000.00,2004-06-15," FELDSTEIN, MARTIN ", h30013132661, I, HARVARD UNIVERSITY ,, M ,, BELMONT, MA , 02478, H5100, Đại học Harvard ,,,, Lisa Murkowski (R), N00026050, R, P, AK, AK ,, Lisa Murkowski - Thượng viện Hoa Kỳ, C00384529, R, f ,,, liên bang: senate, liên bang: senate, Tôi, W' –

Trả lời

10

Giá trị rỗng được hiểu là chuỗi rỗng (''), không phải là NULL, do đó giá trị mặc định không được sử dụng.

Nếu bạn muốn kiểm soát rõ ràng việc xử lý các chuỗi trống này, điều tốt nhất cần làm là tải chúng vào biến người dùng và sau đó đặt cột có điều kiện sử dụng biến người dùng.

Bạn có thể sử dụng điều này để đặt giá trị thành bất kỳ giá trị nào bạn muốn (NULL, 0, v.v ...).

Dưới đây là một ví dụ, giả sử bạn muốn đặt nó là 0:

LOAD DATA INFILE '...' 
INTO TABLE your_table 
FIELDS TERMINATED BY ',' 
(column_one,..., @contributor_zipcode,..., column_n) 
SET contributor_zipcode = IF(@contributor_zipcode='',0,@contributor_zipcode); 
+0

Cảm ơn, điều này thực sự hữu ích. Một theo dõi: MySQL sẽ cho phép tôi đặt giá trị của một trường INT thành NULL? Hay bạn muốn giới thiệu chỉ sử dụng 0? –

+0

Có, bạn có thể đặt INT thành NULL, đây có thể là những gì bạn muốn làm trong trường hợp này. Bạn chỉ cần đảm bảo cột được xác định để cho phép NULL. –

1

Trong Csv tôi đã thay thế tất cả các "" với "\ N" trước khi tôi chạy kịch bản, điều này tạo ra một lĩnh vực null trong db

0

Đối với một số yếu tố (ví dụ: mã zip), có thể tốt hơn cho giá trị mặc định là null, không phải 0.

Giả sử bạn có một bảng người được gọi là (cái gì khác) People.

create table People (
    id int, 
    first_name varchar(30), 
    last_name varchar(50), 
    city varchar(50), 
    state varchar(50), 
    zip int 
); 

Tiếp theo, tải vào bảng People. Lưu ý dòng cuối cùng (bắt đầu với set), nơi zip được gán null nếu giá trị trong file là "" (aka một chuỗi rỗng)

load data local infile '/path/to/file.csv' 
into table People 
fields 
    terminated by ',' 
    enclosed by '"' 
lines terminated by '\n' 
(id, first_name, last_name, city, state, @zip) 
set zip = if(@zip='', null, @zip); 
Các vấn đề liên quan