Значение по умолчанию для пустых целочисленных полей при импорте данных CSV в MySQL
я импортирую CSV в таблицу MySQL с LOAD DATA INFILE
. В одном из полей таблицы хранятся данные почтового индекса, которые я определил в структуре таблицы 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 не позволит. Есть советы?
3 ответов
пустые значения интерпретируются как пустая строка ( " ), а не 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);
для некоторых элементов (например, почтовые индексы), может быть лучше для значения по умолчанию, чтобы быть 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
), где 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);