我必须将数据库从Oracle迁移到拥有数十亿数据的MySql。我找到了一种策略来创建模式,并从Oracle获取CSV中的数据,并将数据加载到MySQL。我创建了一个带有引号(“)分隔符的CSV文件,字段以逗号(,)结尾。现在的问题是,CSV文件包含特殊字符,它不会在MySql中导入。
我正在使用命令:
LOAD DATA LOCAL infile 'C:/Users/NNCP4659/export.csv' INTO TABLE dbk_address_master
CHARACTER SET utf8 fields terminated BY "," enclosed by '"' lines terminated
BY "\r\n"(id, country_code,address,city_id,latitude,longitude,
@is_active,google_address,old_address,building_number,street_name,created_by)
set is_active=cast(@is_active as signed);我的数据是:
4113973,"CHE","167 Bernerstrasse Süd","57066","47.3943271","8.4865849",1,"Bernerstrasse Süd 167, 8048 Zürich,
Switzerland","167 Bernerstrasse Süd","Y","167","Bernerstrasse Süd","migration"错误是:
错误1300 (HY000):无效的utf8字符串:‘167号Bernerstrasse’
发布于 2018-10-29 15:40:13
167 Bernerstrasse S看起来像第一个非utf8 8字符的167 Bernerstrasse Süd截断。
您已经指定传入的数据是utf8通过
LOAD DATA ... CHARACTER SET utf8 ...我的结论是,传入的文件没有正确编码。它可能是latin1,在这种情况下,十六进制将是FC。假设是这样的话,您应该切换到
LOAD DATA ... CHARACTER SET latin1 ...目标列中的CHARACTER SET是否不是latin1并不重要;MySQL将在飞行中对其进行转码。
(或者,您可以将传入的数据更改为utf8 (十六进制:C3BC),但这可能更麻烦。)
参考:Trouble with UTF-8 characters; what I see is not what I stored中的“截断”
(至于如何检查十六进制或执行SHOW CREATE TABLE,我们需要知道您正在使用的操作系统以及可用的工具。)
https://stackoverflow.com/questions/53019322
复制相似问题