2015-07-21 101 views
4

我试图内联上传存储在UTF-8文本文件中的数据,而我有两个问题。首先,这个表上目前没有设置主键,并且它没有设置为自动递增或在此时被强制为空;一旦所有的数据被加载,第一列将成为预期的主键,并且外键将在该点被添加。导入文件时出现错误“1366错误的整数值:'1'”

我收到以下错误:

25 row(s) affected, 1 warning(s): 1366 Incorrect integer value: '1' for column 'idtable_file' at row 1 Records: 25 Deleted: 0 Skipped: 0 Warnings: 1

试图运行这个时:

LOAD DATA LOCAL INFILE '/path' INTO TABLE sandr.table_file 
columns terminated by ',' 
LINES terminated by '\n' 
(idtable_file, owner_id, folder_id, @modified_date, @created_date, size, filename) 
SET modified_date = STR_TO_DATE(@modified_date,'%d/%m/%Y %T'), 
    created_date = STR_TO_DATE(@created_date,'%d/%m/%Y %T') 
此表上

CREATE TABLE `table_file` (
    `idtable_file` int(11) DEFAULT NULL, 
    `owner_id` int(11) DEFAULT NULL, 
    `folder_id` int(11) DEFAULT NULL, 
    `modified_date` datetime DEFAULT NULL, 
    `created_date` datetime DEFAULT NULL, 
    `size` int(11) DEFAULT NULL, 
    `filename` varchar(255) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

我做错了什么,但我我刚刚开始使用MySQL,所以我在黑暗中刺穿了一点点,对此有什么想法?此外,虽然上面的SQL查询在PowerShell中工作正常时,它只是这个:

LOAD DATA LOCAL INFILE '/path' INTO TABLE sandr.table_file 
columns terminated by ',' 
LINES terminated by '\n' 

它弹了有:

Exception calling "ExecuteNonQuery" with "0" argument(s): "Fatal error encountered during command execution."

如果我添加了调整日期字段。

回答

4

25 row(s) affected, 1 warning(s): 1366 Incorrect integer value: '1' for column 'idtable_file' at row 1 Records: 25 Deleted: 0 Skipped: 0 Warnings: 1

我也遇到过这个错误。需要注意的一点是,

  • 错误显然是荒谬的(这似乎是说“1”,这是一个整数,是不正确的整数值),并
  • 它发生在的非常第一列的第一排只有

如果这两个条件成立,那么在所有的可能性,罪魁祸首是隐藏的三字节序列,是嫌在你试图加载SQL文件的开头(这就是所谓的UTF8字节顺序Mark)。

在某些情况下,序列在错误消息中被转义并被显示为可识别的,例如in this bug report。在其他情况下,被发送到用户的价值的一部分:

Incorrect integer value: '###1' ... 

但终端“吃”的BOM,你看到的是(现在的荒谬)错误

Incorrect integer value: '1' ... 

为了解决这个问题,你需要在一些能够删除字节顺序标记的编辑器(例如Notepad ++)中打开要导入的文件。

+2

太棒了!你先生,是物料清单!我将文件重新保存为没有BOM的UTF-8,而Bob是我的叔叔。你刚刚为我节省了大量的浪费时间,手动修复了表格中出现的所有200多行代码,Hats off给你:-) – Neil

+0

我只需要弄清楚是什么导致powershell引发异常,那就是我几个星期的努力已经完成了。你会建议我提出一个单独的问题吗? – Neil

+0

明天我会检查出来,现在已经很晚了,还有39摄氏度:-)但我会*检查它。 – LSerni

相关问题