导入数据中文乱码_基于Navicat和Kettle的数据迁移完全解读(多图)
需求描述
对于数据分析人员来说,工作的基础是数据,没有数据分析就无从谈起,即巧妇难为无米之炊。
#数据库# #数据迁移# #Oracle#
然而,数据分析往往在实验环境或者准生产环境中开展,而数据分布在生产环境,因此需要将生产环境的部分数据导入到准生产环境中。因为网络隔离和权限管理的原因,无法直接在生产库和准生产库之间应用数据迁移工具。目前的办法是:将生产库中的数据以数据文件形式导出,然后通过安全手段传送到准生产环境,然后在准生产环境中应用Kettle等数据迁移工具实现数据的导入。
下面的实验路径如下:生产数据文件-->Mysql临时库-->准生产Oracle库。
Logo
将数据导入到MySQL临时库中(基于Navicat)
使用Navicat的导入向导可以便捷地将文本文件中的数据导入到Mysql库中,从而为下一步通过Kettle迁移至Oracle做准备,同时可以做一些临时性的分析。具体导入步骤如下:
1.选择数据库下面的【表】,选择【导入向导】
导入向导
2.选择要导入的数据文件格式,常见的txt、csv、excel等。
选择文件格式
3.选择分隔符。如果是csv文件的话保持默认就可以了,如果是用|等分割的txt文件,则需要进行调整。
选择分隔符
4.选择目标表。选择要把数据导入的数据表,可以是不存在的表,也可以是已存在的表。不存在的表需要新建,已存在的则需要去掉新建表下面的勾选。
选择数据表
5.调整表结构。在这一步,可以看到从文本文件中解析出来的表结构,即字段名称、字段类型等,同时可以根据需要对字段类型、长度和主键进行设定。我们这里先不做任何调整,看看后面什么结果。
调整表结构
6.附加选项。设定文本文件的起始和结束行数,设定首行是否为列名,设定日期和数值型数据的格式等。
附加选项
7.选择导入模式。选择数据导入模式,有追加、更新、删除、复制等几种模式,我们选择“复制”,即新建表并将数据导入其中。
8.开始导入(失败)。在第7步的基础上执行下一步,然后点击开始,执行导入操作。很遗憾,导入失败,报“row size too large.XXXXX”的错误(见下图)。
这个错误是因为,在前面的设置中,我们将每个字段都设置为Varchar类型且长度为255,且宽表字段数量N过多(N>100),255*N超出了Mysql的限制(65535)。因此,解决方法是调整字段类型及长度,使之低于Mysql的限制。
开始导入
导入报错
9.按需调整字段类型及长度,这里主要调整的是长度,由255调减至32,够用了。
调整字段类型长度
10.再次导入(成功)。调整完字段类型及长度后,再次执行导入,显示导入成功,验证发现数据确已入库。
再次导入
数据验证
Mysql数据向Oracle迁移(基于Kettle)
基于Navicat完成了数据文件的导入之后,下一步就是利用Kettle实现数据在Mysql数据库和Oracle数据库上的迁移,具体操作过程如下:
1.新建转换。打开Kettle,新建转换,为数据迁移做准备。
新建转换
2.选择表输入并将表输入组件拖入主功能区。
选择表输入
3.编辑表输入节点并选择源数据库类型,这里选择Mysql。
编辑表输入
选择源数据库
4.完成数据库连接的配置。包括主机名、端口、数据库名称、数据表、用户名、密码等,通过测试可验证数据库是否已正确连接。
配置数据库连接
5.完成表输出配置。完成表输入配置后,选择表输出并拖至主功能区,按照表输入配置的方式完成表输出的配置,只是这里要配置Oracle的数据库连接,包括主机名、数据库、数据表、用户名、密码、端口等。同样的,可以通过测试验证是否已连接成功。
表输出配置
表输出测试
6.建立表输入与表输出的连接,即在主功能区中,点击表输入的箭头并拖至表输出的箭头处。
建立输入节点和输出节点的连接
7.启动转换(失败)。点击主功能区左上角的三角形按钮,启动转换。
很遗憾,转换失败,表输出节点上出现了红色标识。通过查看日志发现,这是因为在表输出中配置的数据表不存在,导致数据无法插入。所以,解决的办法就是新建数据表。如果通过create新建就太吃力了,还好可以通过配置解决,详见第8步。
启动转换
启动转换
转换失败
8.建立输出数据表。在Oracle数据连接配置界面中,选择【数据库字段】,然后点击【获取字段】,选择Mysql数据库中的输入表,即可自动生成目标表的建表语句,执行建表语句即可完成目标表的构建。
获取字段
选择mysql表
9.启动转换(成功)。再次启动转换,没有报错,意味着转换成功。
转换成功
中文乱码,如何解决?
完成Mysql向Oracle的数据迁移后,通过PL/SQL查询发现数据表中的中文乱码,显然这是因为两边数据编码不一致造成的,解决方法就是配置编码使两边保持一致。
1.查看Oracle的数据编码,可以看出是GBK,下一步就是把Mysql的编码调整成GBK。
查看Oralce编码
2.配置Mysql编码。在表输入的配置环节,在【高级】中增加“set names gbk;”,在【选项】中增加“characterEncoding:gbk”。
set names gbk
characterencoding:gbk
3.配置完成后,再次执行转换任务,验证发现中文正常显示。
数据验证
总结
本文通过一个具体的业务场景逐步介绍了数据的迁移过程,总结如下:
- Navicat提供了较好的数据导入工具,可以实现数据文件的快速入库。
- Kettle可以快捷地实现数据在异构数据库中的迁移,配置项丰富,操作简单。
- 使用Navicat进行数据导入时,要注意设置合理的表结构,不能超过Mysql限制,否则会导入失败。
- 在使用Kettle进行数据在Mysql和Oracle中的迁移时,一是要确保目标Oracle表的存在,如不存在则需要配置或新建,二是要注意编码一致,避免出现总问乱码。
我是会说科技,关注我,一起聊聊数据、科技、IT、安全、金融那些琐事。####
导入数据中文乱码_基于Navicat和Kettle的数据迁移完全解读(多图)相关推荐
- datax 导入数据中文乱码_浅谈数据同步之道
数据同步,顾名思义就是不同系统的数据进行同步处理.而业务系统所涉及的数据库同步是重中之重,虽然大部分数据库都提供了导入导出的工具,但是数据存储到各个地方,Hive.Hbase.MySQL.Oracle ...
- ajax后台返回数据中文乱码_解决Jmeter返回值显示中文乱码 的三种方法及设置随机动态参数(非原创侵删)...
一.Jmeter返回值显示中文乱码解决方法 第一种解决方法: 1. 点击线程组--添加--后置处理器--BeanShell后置处理程序 2.点击BeanShell后置处理程序,编写:prev.setD ...
- datax 导入数据中文乱码_四种方法处理MYSQL导入中文数据时的乱码问题 | 很文博客...
我是用的最后一种方法,前面三种解决MYSQL导入数据乱码的方法没试过,很文博客推荐大家直接使用第四种方法处理MYSQL导入中文数据时的乱码问题. 首先在新建数据库时一定要注意生成原数据库相同的编码形式 ...
- linux mysql插入中文乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题
一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一 直接在linux上面使用 ...
- ajax传输json数据格式乱码_解决Ajax加载JSon数据中文乱码问题
一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: Java代码 async: { ...
- js post中文乱码 php,AJAX之POST数据中文乱码如何解决
本文主要和大家分享AJAX之POST数据中文乱码如何解决,前端使用encodeURI进行编码,希望能帮助到大家.var param = encodeURI(param); $.ajax({ url: ...
- mysql导出数据到表格讲解大全(导出数据带表头,导出数据中文乱码问题解决)
方法1 使用sqlyang工具 1.本地准备好一个文件 2.选择数据 3.点击图中所示按钮 ,选择复制所有行到剪贴板 4.一般都选择确定,无须修改 5 打开之前的文件,粘贴保存 方法2 使用mysql ...
- dbvisualizer查询mysql中文乱码_使用PLSQL Developer和DbVisualizer查询oracle数据库时出现乱码...
使用PLSQL Developer和DbVisualizer查询oracle数据库时,出现查询数据中文乱码情况. 查看了一下数据库编码格式 select * from v$nls_parameters ...
- 用springmvc作接口时返回json数据中文乱码
以前都是用springmvc做web项目,浏览器访问,所以没出现过fastjson中文乱码的问题,今天要做一个接口,结果杯具了中文乱码. 接口调用拿到返回数据疯狂的修改编码,结果无效,考虑是不是jso ...
最新文章
- css float 的使用
- 信息收集——Office钓鱼
- ViewPager与Tab结合使用
- SAP HANA中创建时间相关的数据时候需要Variant Schema
- 转载:SQL server2005 里面没有management studio!下载SQL开发版本
- 4.3 Siamese 网络
- selenium——元素的定位
- java 自定义注解 生成json_Java使用@JsonDeserialize注解实现自定义反序列化器
- mysql主主双机互备(三)
- IOS中延时执行的几种方式的比较和汇总
- configure: error: C++ compiler cannot create executables
- ERROR: Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately
- 钱理群: 真正的鲁迅是沉默的
- 人体工学电脑椅选购建议 | 潘魏增
- react开发插件-ES7 React/Redux/GraphQL/React-Native snippets
- Elasticsearch基础11——索引之别名使用
- java的println、print与printf
- office2021、Excel2021设置密码
- UnboundLocalError: local variable 'end_page' referenced before assignment
- python如何使用最简单的方式将PDF转换成Word?
热门文章
- Java问题集锦--The type StringEscapeUtils is deprecated
- java通过HTTPS协议POST提交接收JSON格式数据
- kafka集群下载、启动、部署、测试
- 企业实战_13_MyCat清除冗余数据
- Launch failed - cleaning up connection
- Bigdecimal基本运算及小数保留方式枚举
- c++ 指针拼接字符串_字符串拼接+和concat的区别
- python加载模型包占用内存多大_如何保持Keras模型加载到内存中并在需要时使用它? - python...
- decimal转为string sql_PHP+Mysql防止SQL注入的方法
- 南航计算机学院岳涛,自动化学院 - 南京航空航天大学