【问题标题】:error 1265. Data truncated for column when trying to load data from txt file错误 1265。尝试从 txt 文件加载数据时,列的数据被截断
【发布时间】:2013-01-23 17:13:36
【问题描述】:

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

【问题讨论】:

    标签: mysql csv


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我遇到了同样的问题。我从 MariaDB/HEIDISQL 收到截断“警告”,但导入后数据看起来很好。更改行终止为 \r\n 解决了警告。
      【解决方案3】:

      当我的数据在 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得到了这个提示

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          您缺少FIELDS TERMINATED BY ',',它假设您默认使用制表符分隔。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 这是 2013 年发布的 :) 但是thanx :) 我认为问题出在数据格式上 :) 但我不记得了
            • @Andrey 对 necropost 感到抱歉,但我认为无论如何人们可能会觉得这很有用,因为问题和答案仍然有效且有帮助!
            • 没问题,谢谢 :) 我知道它仍然有用 :)
            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

              这个错误也可能是没有线的结果,

              FIELDS SPECIFIED BY ','
              

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

              【讨论】:

              • TERMINATED,不是SPECIFIED
              【解决方案9】:

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

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

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

              祝你好运。

              【讨论】:

              • 但它不能大于 int,因为 max int 是 10 位数字,我只使用 7 位数字。表真的很大,超过 128000 条记录
              • @AndreyIvanov -- 仔细检查你的第一行(也是最后一行)。正如我所提到的,您应该能够导入另一个表,将该字段更改为 varchar,然后看看会发生什么。我怀疑另一个错误,但不同的 int 列。告诉我。
              • 好的,明天早上试试,让你知道。
              • 将所有字段更改为 varchar(50)。抛出错误 1261。第 1 行不包含所有列的数据。这对我来说没有意义!
              • @AndreyIvanov -- 你的第一行是空白还是空?查看使用 LOAD DATA 的参数——如果它始终是第一行,也许添加 IGNORE 1 LINES 会有所帮助。这里有更多信息dev.mysql.com/doc/refman/5.0/en/load-data.html
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-12-20
              • 2021-11-01
              • 1970-01-01
              • 2016-05-22
              • 2022-10-19
              • 1970-01-01
              相关资源
              最近更新 更多