错误1265.尝试从txt文件加载数据时,列的数据被截断

时间:2013-02-08 01:03:12

标签: mysql csv

我在mysql表中有表 表看起来像

create table Pickup
(
PickupID int not null,
ClientID int not null,
PickupDate date not null,
PickupProxy  varchar (40) ,
PickupHispanic bit default 0,
EthnCode varchar(2),
CategCode varchar (2) not null,
AgencyID int(3) not null,

Primary Key (PickupID),
FOREIGN KEY (CategCode) REFERENCES Category(CategCode),
FOREIGN KEY (AgencyID) REFERENCES Agency(AgencyID),
FOREIGN KEY (ClientID) REFERENCES Clients (ClientID),
FOREIGN KEY (EthnCode) REFERENCES Ethnicity (EthnCode)
);

sample data from my txt file 
1065535,7709,1/1/2006,,0,,SR,6
1065536,7198,1/1/2006,,0,,SR,7
1065537,11641,1/1/2006,,0,W,SR,24
1065538,9805,1/1/2006,,0,N,SR,17
1065539,7709,2/1/2006,,0,,SR,6
1065540,7198,2/1/2006,,0,,SR,7
1065541,11641,2/1/2006,,0,W,SR,24

当我尝试使用

提交时
LOAD DATA INFILE 'Pickup_withoutproxy2.txt' INTO TABLE pickup;

它抛出错误

  

错误代码:1265。第1行的“PickupID”列的数据被截断

我正在使用MySQL 5.2

9 个答案:

答案 0 :(得分:14)

此错误表示Pickup_withoutproxy2.txt文件中至少有一行的第一列中的值大于int(您的PickupId字段)。

  

Int只能接受-2147483648到2147483647之间的值。

查看您的数据,看看发生了什么。如果您的txt文件非常大且难以查看,您可以尝试将其加载到具有varchar数据类型的临时表中。很容易在数据库中加载后检查一个int。

祝你好运。

答案 1 :(得分:9)

您错过了FIELDS TERMINATED BY ',',并且假设您默认使用制表符分隔。

答案 2 :(得分:3)

我遇到了一个具有 ENUM 值的列(' 0',' 1')。 当我尝试保存新记录时,我为 ENUM 变量指定了值 0

对于 解决方案:我已将 ENUM 变量值从 0 更改为 1 1 2

答案 3 :(得分:1)

尝试将现有的varchar列转换为enum时遇到此问题。对我来说,问题在于该列的现有值不属于enum接受值列表的一部分。因此,如果您的enum仅允许使用值,例如('dog', 'cat'),但表中有一行带有bird的行,则MODIFY COLUMN将失败,并显示此错误。

答案 4 :(得分:1)

我遇到了同样的问题,我的错误是我试图将之前未定义的值加载到 ENUM()

例如,ENUM('sell','lend') 和我试图将值 return 加载到该列。我需要加载它,所以我将它添加到 ENUM 并再次加载。

答案 5 :(得分:0)

此错误也可能是因为没有该行,

FIELDS SPECIFIED BY ','

(如果您在MySQL语法中使用逗号分隔字段),如MySQL文档的this page中所述。

答案 6 :(得分:0)

我有同样的问题。我想在表结构中编辑ENUM值。问题是因为之前保存过行,而新的ENUM值不包含保存的值。

解决方案正在更新MySql表中的旧保存行。

答案 7 :(得分:0)

当我的数据列中有多余的空格,制表符,换行符或其他字符(decimal(10,2))时,我也看到了同样的警告,我必须从值中删除这些字符。

这是我的处理方式。

LOAD DATA LOCAL INFILE 'c:/Users/Hitesh/Downloads/InventoryMasterReportHitesh.csv' 
INTO TABLE stores_inventory_tmp 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@col1, @col2, @col3, @col4, @col5)
SET sku = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col1,'\t',''), '$',''), '\r', ''), '\n', ''))
, product_name = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col2,'\t',''), '$',''), '\r', ''), '\n', ''))
, department_number = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col3,'\t',''), '$',''), '\r', ''), '\n', ''))
, department_name = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col4,'\t',''), '$',''), '\r', ''), '\n', ''))
, price = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col5,'\t',''), '$',''), '\r', ''), '\n', ''))
;

我从this answer那里得到了提示

答案 8 :(得分:0)

原因是mysql期望文本文件中行的结尾在最后指定的列之后,并且该符号为char(10)或'\ n'。取决于创建文本文件的操作系统或您自己创建的文本文件,它可以是其他组合(Windows使用'\ r \ n'(chr(13)+ chr(10))作为行分隔符)。因此,如果使用Windows生成的文本文件,请在LOAD命令中添加以下后缀:“ LINES TERMINATED BY'\ r \ n'”。否则,请检查文本文件中行的分隔方式。在默认的mysql中,期望char(10)作为行分隔符。