2011-03-22 63 views
5

我正在使用LOAD DATA INFILE將CSV導入到MySQL表中。表格的其中一個字段存儲郵政編碼數據,我在表格結構contributor_zipcode INT中定義了這些數據。在MySQL中導入CSV數據時的空整型字段的默認值

在CSV中,此字段有時爲空。當我執行LOAD查詢,MySQL將拋出類似的警告:

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

我試着重新定義字段作爲contributor_zipcode INT DEFAULT '0',這就造成了同樣的警告,並contributor_zipcode INT DEFAULT NULL,這MySQL不會允許。有什麼建議?

+0

您可以發佈您的CSV啞線文件? – Stony 2011-03-22 16:10:53

+0

'2004,urn:fec:transaction,indiv:2004:1902928,15,24020610238,f,1000.00,2004-06-15,「FELDSTEIN,MARTIN」,h30013132661,I,HARVARD UNIVERSITY ,, M ,, BELMONT,MA ,02478,H5100,哈佛大學,Lisa Murkowski(R),N00026050,R,P,AK,AK,Lisa Murkowski-美國參議院,C00384529,R,f ,,,聯邦:參議院,聯邦:參議院,我,W' – 2011-03-22 16:17:29

回答

10

空值被解釋爲空字符串(''),而不是NULL,因此未使用默認值。

如果要顯式控制這些空字符串的處理,最好的辦法是將它們加載到用戶變量中,然後使用用戶變量有條件地設置列。

你可以用它來設置你想要的值(NULL,0等)。

這裏有一個例子,假設你想將它設置爲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

謝謝,這真的很有幫助。一個後續:MySQL會允許我將INT字段的值設置爲NULL嗎?或者你會建議只使用0? – 2011-03-22 17:31:57

+0

是的,您可以將INT設置爲NULL,這可能是您在此情況下要執行的操作。你只需要確保列被定義爲允許NULL。 – 2011-03-22 17:34:23

1

以CSV我全部換成了「」用「\ n」之前我運行該腳本,這將創建數據庫空場

0

對於某些元素(例如郵政編碼),默認值可能會更好,爲null,而不是0

假設你有一張叫做(還有)People的人的表格。

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

接下來,加載file.csvPeople表。 注意最後一行(從set),其中zip分配null如果文件中的值是""(又名空字符串)

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