【问题标题】:Finding MySQL errors from LOAD DATA INFILE从 LOAD DATA INFILE 中查找 MySQL 错误
【发布时间】:2021-09-03 15:28:50
【问题描述】:

我正在 MySQL 中运行 LOAD DATA INFILE 命令,其中一个文件在 mysql 提示符下显示错误。

如何检查警告和错误?现在我唯一需要做的就是提示在导入时报告了 65,535 个警告。

mysql> use dbname;
Database changed
mysql> LOAD DATA LOCAL INFILE '/dump.txt'
    -> INTO TABLE table
    -> (id, title, name, accuracy);
Query OK, 897306 rows affected, 65535 warnings (16.09 sec)
Records: 897306  Deleted: 0  Skipped: 0  Warnings: 0

我如何让 mysql 告诉我这些警告是什么?我查看了错误日志,但找不到它们。运行“SHOW WARNINGS”命令只返回 64 个结果,这意味着剩余的 65,000 个警告必须在其他地方。

2 |
| Warning | 1366 | Incorrect integer value: '' for column 'accuracy' at row 2038
3 |
| Warning | 1366 | Incorrect integer value: '' for column 'accuracy' at row 2038
4 |
| Warning | 1366 | Incorrect integer value: '' for column 'accuracy' at row 2038
6 |
| Warning | 1366 | Incorrect integer value: '' for column 'accuracy' at row 2038
7 |
+---------+------+--------------------------------------------------------------
--+
64 rows in set (0.00 sec)

如何找到这些错误?

【问题讨论】:

    标签: sql mysql load-data-infile


    【解决方案1】:

    MySQL SHOW WARNINGS 命令仅向您显示警告的子集。您可以通过修改参数 max_error_count 来更改显示的警告限制。

    【讨论】:

    【解决方案2】:

    出现这么多错误表明您使用了错误的分隔符或多余的引号,导致 MySQL 从您的输入中读取错误的列。

    你可以通过添加来解决这个问题

    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    

    在表名之后和列列表之前。

    类似:

    加载数据本地 INFILE '/dump.txt' INTO TABLE 表 由 ' ' 终止的字段可选地由 '"' 括起来 (id、title、name、accuracy);

    默认情况下,如果你不指定,MySQL 期望制表符终止字段。

    【讨论】:

    • 是的,我以为是两个。但是,所有数据似乎都已正确插入。此外,该文件使用制表符分隔值,因此默认值是正确的。让我感到惊讶的是,在 800,000 行中,可能所有 64,000 条警告都是“整数值不正确”的行。当我只能在 cmd 行上查看这么多时,我只是不确定如何检查。
    • 好吧,请注意您正好有 2^16 个警告,这表明计数器已用尽,而您实际上有更多。我会得到适用于每一行的错误。您确定插入了 800,000 行吗?您对“准确性”列有什么价值?
    • 谢谢,我用这些数据修改了我的帖子。
    【解决方案3】:

    数据文件中可能存在空白条目,并且目标表不允许空值,或者相​​关字段没有有效的默认值。

    我会检查该表是否有 accuracy 的默认值 - 如果没有,请将其设置为零并查看是否可以清除错误。

    或者您可以使用 'awk' 或类似名称对文件进行预处理,并确保所有行中的准确度字段都有一个有效的数值。

    【讨论】:

    • 这就是答案?我认为问题是如何从 mysql 中找到日志?
    • 是的,这不是答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多