Как получить данные SQL LOAD DATA из CSV, чтобы учитывать тип столбца при загрузке? - PullRequest
1 голос
/ 07 января 2010

Я загружаю файл CSV в MySQL (5.1), используя CREATE TABLE и LOAD DATA. У меня есть несколько столбцов, которые являются текстовыми типами (категориями), но содержат числовые значения. Когда я создаю таблицу, я назначаю эти столбцы как VARCHAR(254), но драйвер JDBC создает исключение SQLException «Данные усечены для столбца AgeGroup в строке 1».

Мои данные выглядят так:

ID,AgeGroup
xxx,4
xxy,3
xyx,6
...

Мой оператор создания таблицы выглядит следующим образом

CREATE TABLE abc(ID VARCHAR(254), AgeGroup VARCHAR(254))

Мой оператор загрузки выглядит так

LOAD DATA INFILE \myfile.csv\ INTO TABLE abc FIELDS TERMINATED BY ','

Я предполагаю, что это проблема преобразования типов, потому что AgeGroup - это текстовый столбец базы данных, но я придерживаюсь того, что в нем выглядит цифрами.

Как я могу - могу ли я - заставить команду LOAD DATA учесть тип данных столбца и преобразовать содержимое файла?

Я использую официальный драйвер MySQL JDBC.

1 Ответ

1 голос
/ 07 января 2010

Я удивлен, что это не работает. Я имею в виду, я ожидал бы такого поведения при вставке строковых значений в числовые столбцы, а не наоборот.

В любом случае, вы можете использовать расширение синтаксиса LOAD DATA, введенное в версии 5.0, для вычисления произвольных выражений из ваших необработанных данных:

LOAD DATA INFILE \myfile.csv\ 
INTO TABLE abc 
FIELDS TERMINATED BY ','
(@ID, @AgeGroup)
SET ID = @ID
,   AgeGroup = CAST(@AgeGroup AS UNSIGNED)

(см .: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...