我正在使用CREATE TABLELOAD DATA将CSV文件加载到MySQL(5.1)中。我有许多列是文本类型(类别),但包含数值。在创建表时,我将这些列分配为VARCHAR(254),但是JDBC驱动程序抛出一个SQLException“第1行的column 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驱动程序。

最佳答案

我很惊讶这不起作用。我的意思是,当在数字列中粘贴字符串值时,我会预料到这种行为,而不是相反。
无论如何,您可以使用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)

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

关于sql - 如何在加载时从CSV中获取SQL LOAD DATA以遵守列类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2016649/

10-15 18:51