我必须将具有数十亿数据的数据库从 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'
答案 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
,我们需要知道您使用的是什么操作系统以及可用的工具是什么。)