特殊字符数据迁移

时间:2018-10-27 06:26:35

标签: mysql csv character-encoding special-characters

我必须将具有数十亿数据的数据库从 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 S'

1 个答案:

答案 0 :(得分:1)

167 Bernerstrasse S看起来像167 Bernerstrasse Süd在第一个非utf8字符处的截断。

您已指定传入数据为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,我们需要知道您使用的是什么操作系统以及可用的工具是什么。)