Я пытаюсь загрузить файл, в котором все строки используют одни и те же правила. (предположим, что 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');
У меня возникла эта идея, прочитав нижнюю часть этой страницы (комментарий Ramam Pullella), и я нашел то же самое объяснение на некоторых веб-сайтах, но я не могу понять, почему я получаю эту ошибку.
Если я не использую переменные @var_date_one и @var_date_two и, следовательно, функцию STR_TO_DATE, дата не отображается в соответствии с требованиями MySql - дата в файле выглядит примерно как «20100701» - тогда это поле будет содержать все нули или дату, отличную от той, которую я ожидаю. Если я изменю DLP и DUVI на представление CHAR (8), это будет работать, но я не буду использовать сравнения SQL DATE и аналогичные инструменты.
Не могли бы вы мне помочь? :) Большое спасибо.
РЕДАКТИРОВАТЬ:
Кажется, проблема возникает из-за СТРОКИ, ЗАКОНЧЕННОЙ НА '', поскольку такая строка является «фиксированной строкой (не ограничена)». Может быть, его нельзя присвоить переменной по неизвестной причине, но так оно и работает. В документации говорится:
Пользовательские переменные нельзя использовать, когда загрузка данных в формате фиксированной строки поскольку пользовательские переменные не имеют ширина дисплея.
Есть предложения?
ПОВТОРНОЕ РЕДАКТИРОВАНИЕ: Я прочитал комментарий Райана Нива внизу этой страницы. Он дает уловку для преобразования фиксированной строки в переменные:
LOAD DATA LOCAL INFILE '' INTO 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);
Как вы думаете, это хороший способ сделать это? :)
7
задан Markon 23 November 2010 в 18:35
поделиться
0 ответов
Другие вопросы по тегам: Похожие вопросы: