Error number: MY-013978; Symbol: ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_ENDING_ENCLOSED_BY_LOG; SQLSTATE: HY000
Message: Unexpected characters after ending ENCLOSED BY character found at row %ld in file ‘%s’.
错误说明
该错误代码 MY-013978 为MySQL在查询时所可能出现的错误。ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_ENDING_ENCLOSED_BY_LOG 标志着在查询时在被括号括起来的ENDING后出现了一个意外的字符。更确切的报错信息应为Bulk load data conversion error (truncation) in row n: Unexpected character after ending enclosed BY。
常见案例
该错误的出现通常源于一个不当的BULK插入查询语句中段末缺少分隔符,例如BULK插入语句如下:
LOAD DATA INFILE ‘data.csv’
INTO TABLE TableName
FIELDS TERMINATED BY ‘,’
ENCLOSED BY ‘”‘
LINES TERMINATED BY ‘ ’
该语句中FIELDS TERMINATED BY指定了字段的分隔符为逗号,而ENCLOSED BY则是指每个字段都要用双引号来括起来,这种查询语句要求每行的各个数据字段之间的分隔符、字段内的元素分隔符以及数据末尾的结束符都要严格符合要求才不会出现意外字符的错误。
解决方法
当查询时出现该错误时,可以尝试在BULK插入语句中加入IGNORE n LINES关键字来跳过末尾缺失分隔符可能引发的错误,例如:
LOAD DATA INFILE ‘data.csv’
INTO TABLE TableName
FIELDS TERMINATED BY ‘,’
ENCLOSED BY ‘”‘
LINES TERMINATED BY ‘ ’
IGNORE 1 LINES
以上语句将在查询时跳过一行,从而使得查询在缺失分隔符引发的错误可以被跳过,有效解决MY-013978的问题。此外,也可以尝试将当前的插入语句修改,使得在BULK插入查询中完整地指定所有的分隔符,通过调整和补充语句中各分隔符的位置,也可以有效地解决MY-013978错误发生。