5

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

我如何找到这些错误?

4

3 回答 3

12

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

于 2009-09-28T17:48:42.837 回答
2

出现这么多错误表明您使用了错误的定界符或无关的引号使 MySQL 从您的输入中读取错误的列。

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

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

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

就像是:

LOAD DATA LOCAL INFILE '/dump.txt' INTO TABLE 表字段以 ' ' 结尾,可选地用 '"' 括起来(id、title、name、accuracy);

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

于 2009-09-28T18:01:24.847 回答
0

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

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

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

于 2009-10-16T12:40:32.700 回答