我在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。
这真的有帮助,如果有人知道建议,这是一个巨大的文件,我想避免手动输入错误的字段: - /
答案 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
一切都很好。