首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特殊字符数据迁移

特殊字符数据迁移
EN

Stack Overflow用户
提问于 2018-10-27 06:26:34
回答 1查看 568关注 0票数 0

我必须将数据库从Oracle迁移到拥有数十亿数据的MySql。我找到了一种策略来创建模式,并从Oracle获取CSV中的数据,并将数据加载到MySQL。我创建了一个带有引号(“)分隔符的CSV文件,字段以逗号(,)结尾。现在的问题是,CSV文件包含特殊字符,它不会在MySql中导入。

我正在使用命令:

代码语言:javascript
复制
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);

我的数据是:

代码语言:javascript
复制
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’

EN

回答 1

Stack Overflow用户

发布于 2018-10-29 15:40:13

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

您已经指定传入的数据是utf8通过

代码语言:javascript
复制
 LOAD DATA ... CHARACTER SET utf8 ...

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

代码语言:javascript
复制
 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,我们需要知道您正在使用的操作系统以及可用的工具。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53019322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档