1

我正在使用 and 将 CSV 文件加载到 MySQL (5.1)CREATE TABLELOAD DATA。我有许多列是文本类型(类别)但包含数值。当我创建表时,我将这些列分配为,VARCHAR(254)但 JDBC 驱动程序会抛出 SQLException“第 1 行的 AgeGroup 列被截断的数据”。

我的数据如下所示:

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 驱动程序。

4

1 回答 1

1

我很惊讶这不起作用。我的意思是,我希望在数字列中粘贴字符串值时会出现这种行为 - 而不是相反。

LOAD DATA无论如何,您可以使用v5.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

于 2010-01-06T22:19:54.210 回答