带有特殊字符的MySQL LOAD DATA INFILE问题

时间:2014-01-27 10:21:51

标签: mysql utf-8 special-characters

我在LOAD DATA LOCAL INFILE加载utf8文件时遇到问题。 查询如下所示:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE artikel CHARACTER SET UTF8
FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

但是像“Dämmung”这样的特殊字符的字段将被剪切为“D”。

SHOW VARIABLES LIKE '%_set_%';

显示它全部设置为utf8,我甚至使用notepad ++来确保文件是utf8。

这真的有帮助,如果有人知道建议,这是一个巨大的文件,我想避免手动输入错误的字段: - /

5 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。 有一个" hack"解决了这个问题:用UTF8保护一切。例外情况是" LOAD DATA LOCAL ...."。当我使用LATIN1而不是UTF8时,它可以正常工作。

答案 1 :(得分:0)

不幸的是,LOAD DATA不接受utf8输入,无论在cli选项上传递什么字符集并由表使用。我没有在文档中找到它并假设它是一个bug。

解决方法是改为使用mysqlimport。此解决方案的缺点是,如果要在导入期间禁用外键检查(不适用于MyISAM表),则必须全局禁用它,这需要SUPER权限:

echo "SET GLOBAL FOREIGN_KEY_CHECKS=0;" | mysql -u root -p

答案 2 :(得分:0)

当我对特殊字符问题进行故障排除时,这是我的解决方案:

我将解释:

  • 您可以将;更改为,,因为我使用的是csv ;,与您不同的是
  • 我的列内有换行符,所以我逃脱了\\

脚本是:

LOAD DATA LOCAL INFILE 'D:/File.csv'
INTO TABLE my_table
CHARACTER SET latin1 
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'

答案 3 :(得分:0)

对我有用。

LOAD DATA LOCAL INFILE 'D:/File.csv'
INTO TABLE my_table
CHARACTER SET latin1 
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'

答案 4 :(得分:0)

请注意数据库和表列的排序规则类型!

我将 utf8mb4_unicode_520_ci 用于数据库和表列。

在查询中保留 CHARACTER SET utf8 一切都很好。