从LOAD DATA INFILE中查找MySQL错误

时间:2009-09-28 17:15:17

标签: sql mysql load-data-infile

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

如何找到这些错误?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

获得许多错误表明你有错误的分隔符或无关的引号使得MySQL从输入中读取错误的列。

你可以通过添加

来解决这个问题
[{FIELDS | COLUMNS}
    [TERMINATED BY 'string']
    [[OPTIONALLY] ENCLOSED BY 'char']
    [ESCAPED BY 'char']
]
[LINES
    [STARTING BY 'string']
    [TERMINATED BY 'string']
]

在tablename之后和列列表之前。

类似的东西:

LOAD DATA LOCAL INFILE' /dump.txt'      INTO TABLE表      字段以“'可选地由'''括起来终止      (id,title,name,accuracy);

默认情况下,如果您没有具体说明,MySQL希望制表符可以终止字段。