我使用CREATE TABLE
和LOAD DATA
将CSV文件加载到MySQL(5.1)中。我有许多列是文本类型(类别)但包含数值。当我创建表时,我将这些列分配为VARCHAR(254)
,但JDBC驱动程序抛出SQLException“第1行的AgeGroup列数据被截断”。
我的数据如下:
ID,AgeGroup
xxx,4
xxy,3
xyx,6
...
我的create table语句如下所示
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驱动程序。
答案 0 :(得分:1)
我很惊讶这不起作用。我的意思是,当在数字列中粘贴字符串值时,我会期望这种行为 - 而不是相反。
无论如何,您可以使用v5.0中引入的LOAD DATA
语法的扩展来计算原始数据中的任意表达式:
LOAD DATA INFILE \myfile.csv\
INTO TABLE abc
FIELDS TERMINATED BY ','
(@ID, @AgeGroup)
SET ID = @ID
, AgeGroup = CAST(@AgeGroup AS UNSIGNED)