2009-09-28 166 views
3

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

如何找到这些错误?

回答

1

有可能在数据文件中的空白条目,并且目标表不允许空值,或没有按对于有问题的字段没有有效的默认值。

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

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

+2

这是答案吗?我想问题是如何从mysql中找到日志? – 2014-04-15 06:44:44

5

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

+0

谢谢,更多信息在这里:http://dev.mysql.com/doc/refman/5.1/en/show-warnings.html – Xeoncross 2009-09-28 18:01:22

0

得到那么多的错误表明你有错误的分隔符或无关的引号使得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,标题,名称,精度)'任选地被包围' 字段;

默认情况下,如果你不特定这一点,在MySQL中期望的制表符终止领域。

+0

是的,我认为这是两个。但是,所有数据似乎都正确插入。此外,该文件使用制表符分隔值,因此默认值是正确的。得到我的是,在800,000行中,可能所有64,000个警告都是“整数值不正确”的行。我只是不确定如何检查这一点,因为我只能在cmd行查看这么多内容。 – Xeoncross 2009-09-28 18:17:19

+0

好吧,注意你有2^16的警告,这表明一个计数器已经超出,你实际上有更多。我会得到错误适用于每一行。你确定你插入了800,000行吗?你对'准确度'栏有什么价值? – tpdi 2009-09-28 18:35:15

+0

谢谢,我用这些数据修改了我的帖子。 – Xeoncross 2009-09-28 18:41:08