【问题标题】:Getting error "1366 Incorrect integer value: '1'" when importing file导入文件时出现错误“1366 Incorrect integer value: '1'”
【发布时间】:2015-07-21 18:28:41
【问题描述】:

我正在尝试内联上传存储在 UTF-8 文本文件中的数据,但我遇到了两个问题。首先,该表目前没有设置主键,此时也没有设置为自增或强制为空;加载完所有数据后,第一列将成为预期的主键,此时将添加外键。

我收到以下错误:

25 行受影响,1 个警告:1366 不正确的整数值:第 1 行的列“idtable_file”的“1”记录:25 已删除:0 跳过:0 警告: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'

它爆炸了:

使用“0”参数调用“ExecuteNonQuery”的异常:“在命令执行期间遇到致命错误。”

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

【问题讨论】:

    标签: mysql powershell inline-editing


    【解决方案1】:

    25 行受影响,1 个警告:1366 不正确的整数值:第 1 行的列“idtable_file”的“1”记录:25 已删除:0 跳过:0 警告:1

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

    • 这个错误显然很荒谬(似乎是说整数“1”是一个不正确的整数值),并且
    • 它发生在第一行的第一列并且只发生在那里

    如果这两个条件成立,那么罪魁祸首很可能是一个隐藏的三字节序列,它位于您尝试加载的 SQL 文件的开头(它被称为 UTF8 字节顺序标记)。

    在某些情况下,该序列会在错误消息中转义并以可识别的方式显示,例如in this bug report。在其他情况下,它作为值的一部分发送给用户:

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

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

    Incorrect integer value: '1' ...
    

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

    【讨论】:

    • 我只需要找出导致 powershell 抛出异常的原因,我花了一周的时间就差不多完成了。您是否建议我将其作为一个单独的问题提出?
    • 我有查询和非查询功能,等我回到办公室再贴上非查询功能,大概30分钟。这可能是显而易见的事情或语法问题......
    • 我运行以下函数:
    • 函数 Exec-NonQuery([string]$query) { $Connection.open() $command = $connection.CreateCommand() $command.CommandText = $query $RowsInserted = $command.ExecuteNonQuery( ) $command.Dispose() $Connection.Close() if ($RowsInserted) { return $RowInserted } else { return $query } }
    • 然后只是:$SqlQuery = @" LOAD DATA LOCAL INFILE $path INTO TABLE sandr.table_file 列以 ',' LINES 以 '\r\n' "@ } Exec-NonQuery $SqlQuery 终止
    猜你喜欢
    • 2018-12-13
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多