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

Mysql 错误1265。尝试从txt文件加载数据时,列的数据被截断,mysql,csv,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 nu

我在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

此错误意味着Pickup_withoutproxy2.txt文件的第一列中至少有一行的值大于int(PickupId字段)

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

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


祝你好运。

这个错误也可能是因为没有线路

FIELDS SPECIFIED BY ','

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

您缺少以“,”结尾的
字段,这是假设您默认使用制表符进行分隔。

我遇到了一个列的此问题,该列具有枚举值('0','1')。
当我试图保存一条新记录时,我为ENUM变量赋值0


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

我在尝试将现有的
varchar
列转换为
enum
时遇到了这个问题。对我来说,问题是该列的现有值不属于
enum
的接受值列表。因此,如果您的
enum
只允许值,比如
('dog','cat')
,但表中有一行带有
bird
,则
修改列
将因此错误而失败。

我也有同样的问题。我想编辑表结构中的枚举值。问题是因为以前保存的行以及新枚举值不包含保存的值


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

当我的数据在列中有额外的空格、制表符、换行符或其他字符时,我看到了相同的警告,这些字符是十进制(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', ''))
;

我从

中得到了这个提示,原因是mysql希望文本文件中的行结束符号位于最后指定的列之后,而这个符号是char(10)或'\n'。取决于创建文本文件的操作系统,或者如果您自己创建了文本文件,则可以是其他组合(Windows使用“\r\n”(chr(13)+chr(10))作为行分隔符)。因此,如果使用Windows生成的文本文件,请在LOAD命令中添加以下后缀:“以“\r\n”结尾的行”。否则,请检查文本文件中的行分隔方式。在默认mysql上,需要使用char(10)作为行分隔符。

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


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

但它不能大于int,因为max int是10位数字,我只使用7位数字。这张桌子真的比128000多了records@AndreyIvanov--再次检查您的第一行(和最后一行)。正如我所提到的,您应该能够导入到另一个表中,将该字段更改为varchar,然后看看会发生什么。我怀疑还有另一个错误,但int列不同。让我知道。Ok将在明天早上尝试并让您知道。将所有字段更改为varchar(50)。抛出错误1261。第1行不包含所有列的数据。这对我来说没有意义@AndreyIvanov——您的第一行是空的还是空的?查看使用LOAD DATA的参数——如果总是第一行,那么添加IGNORE 1行可能会有所帮助。这里有一些更多的信息
终止了
,不是
指定的
它是从2013年发布的:)但是thanx:)我认为问题在于数据格式:)但我不知道remember@Andrey对于necropost很抱歉,但我认为人们可能会觉得这很有用,因为问题和答案仍然有效且有用!没问题,谢谢:)我知道它仍然有用:)