特殊字符数据迁移

lf5gs5x2  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(280)

我必须将一个数据库从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'

vx6bjr1n

vx6bjr1n1#

167 Bernerstrasse S 看起来像是 167 Bernerstrasse Süd 在第一个非utf8字符处。
您已经指定传入的数据是utf8 via

LOAD DATA ... CHARACTER SET utf8 ...

我的结论是传入的文件没有正确编码。它可能是拉丁文1,在这种情况下,十六进制是 FC . 假设是这种情况,您应该切换到

LOAD DATA ... CHARACTER SET latin1 ...

如果 CHARACTER SET 在目标列中不是1;mysql将在飞行中对其进行转码。
(或者,您可以将传入的数据更改为utf8(十六进制: C3BC ),但这可能会更麻烦。)
参考:utf-8字符出现故障时“截断”;我看到的不是我储存的
(至于如何检查六角形,还是怎么做 SHOW CREATE TABLE ,我们需要知道您正在使用什么操作系统以及您有哪些可用的工具。)

相关问题