Я пытаюсь загрузить файл, где все строки используют одинаковые правила. (предположим, HEADER - одна строка)
HEADER1
HEADER2
.......
Но, к несчастью, когда я пытаюсь использовать оператор LOAD DATA INFILE, я получаю эту ошибку: Код ошибки: 1409
Невозможно загрузить значение из файла со строками фиксированного размера в переменную .
Это код, который я написал:
USE test;
DROP TABLE IF EXISTS EXAMPLE_H;
CREATE TABLE EXAMPLE_H(
ID CHAR(20),
SP CHAR(3),
IVA CHAR(11) PRIMARY KEY,
NLP CHAR(6),
DLP DATE,
DUVI DATE,
DELP CHAR(30),
FILLER CHAR(39),
VTLP CHAR(3),
FILL CHAR(49)
);
LOAD DATA INFILE 'BTILSP.TXT'
INTO TABLE test.EXAMPLE_H
FIELDS TERMINATED BY ''
LINES TERMINATED BY '\n'
(ID, SP, IVA, NLP, @var_date_one, @var_date_two, DELP, FILLER, VTLP, FILL)
SET DLP = str_to_date(@var_date_one, '%Y%m%d',
DUVI = str_to_date(@var_date_two, '%Y%m%d');
У меня была идея прочесть нижнюю часть этой страницы (комментарий Рамама Пуллеллы), и я нашел то же самое объяснение на некоторых сайтах, но я не могу понять, почему я получаю эту ошибку.
Если я не использую переменные @var_date_one и @var_date_two и, таким образом, функцию STR_TO_DATE, дата не отображается в соответствии с требованиями MySql - дата в файле выглядит как «20100701» - тогда это поле будет содержать все нули или дата отличается от того, что я ожидаю. Если я изменю DLP и DUVI для представления в CHAR (8), то это сработает, но я не буду использовать сравнения SQL DATE и подобные инструменты.
Можете ли вы помочь мне, пожалуйста? :)
Большое спасибо.
РЕДАКТИРОВАТЬ:
Кажется, проблема дается LINE TERMINATED BY '', так как этот тип линии является "фиксированной строкой (неограниченной)". Может быть, он не может быть назначен переменной по неизвестной причине, но именно так он работает.
В документации написано:
Пользовательские переменные нельзя использовать, когда
загрузка данных в формате фиксированной строки
потому что пользовательские переменные не имеют
ширина дисплея.
Есть предложения?
RE-EDIT:
Я прочитал комментарий Райана Нева в нижней части этой страницы. Он дает хитрость для чтения фиксированной строки в переменные:
LOAD DATA LOCAL INFILE '<file name>' INTO TABLE <table>
(@var1)
SET Date=str_to_date(SUBSTR(@var1,3,10),'%m/%d/%Y'),
Time=SUBSTR(@var1,14,8),
WindVelocity=SUBSTR(@var1,26,5),
WindDirection=SUBSTR(@var1,33,3),
WindCompass=SUBSTR(@var1,38,3),
WindNorth=SUBSTR(@var1,43,6),
WindEast=SUBSTR(@var1,51,6),
WindSamples=SUBSTR(@var1,61,4);
Как вы думаете, это хороший способ сделать это? :)