簡體   English   中英

在MySQL中導入CSV數據時空整數字段的默認值

[英]Default value for empty integer fields when importing CSV data in MySQL

我正在使用LOAD DATA INFILE將CSV導入MySQL表。 其中一個表的字段存儲了郵政編碼數據,我在表結構contributor_zipcode INT定義了該數據。

在CSV中,此字段有時為空。 當我執行LOAD查詢時,MySQL將發出如下警告:

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

我已經嘗試將字段重新定義為contributor_zipcode INT DEFAULT '0' ,它創建相同的警告,並且contributor_zipcode INT DEFAULT NULL ,MySQL將不允許。 有什么建議?

空值被解釋為空字符串(''),而不是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);

在Csv中,我在運行腳本之前用“\\ N”替換了所有“”,這在db中創建了一個空字段

對於某些元素(例如郵政編碼),默認值可能更好為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.csv加載到People表中。 注意最后一行(以set開頭)如果文件中的值為"" (也就是空字符串), 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM