如果公司内一开始没有好好规划数据库建设,那么后期可能存在多种字符集的数据库实例。在做数据仓库或者来回导数据的时候,因字符集导致中文乱码问题困扰着不少人。网上有很多前辈们总结的解决中文乱码的方案,关于使用kettle如何解决也有一两篇谈到在建数据库连接时加characterEncoding来解决。我昨晚找到另外一种方式来跟大家分享:
经过对源码搜索”encoding“,找一句注释,发现其实解决方法很简单,
/**
* Build the row using ResultSetMetaData rsmd
* @param rm The resultset metadata to inquire
* @param ignoreLength true if you want to ignore the length (workaround for MySQL bug/problem)
* @param lazyConversion true if lazy conversion needs to be enabled where possible
*/
private RowMetaInterface getRowInfo(ResultSetMetaData rm, boolean ignoreLength, boolean lazyConversion) throws KettleDatabaseException
{
if (rm==null) return null;
rowMeta = new RowMeta();
try
{
// TODO If we do lazy conversion, we need to find out about the encoding
//
int fieldNr = 1;
int nrcols=rm.getColumnCount();
for (int i=1;i<=nrcols;i++)
{
String name=new String(rm.getColumnName(i));
// Check the name, sometimes it's empty.
//
if (Const.isEmpty(name) || Const.onlySpaces(name))
{
name = "Field"+fieldNr;
fieldNr++;
}
ValueMetaInterface v = getValueFromSQLType(name, rm, i, ignoreLength, lazyConversion);
rowMeta.addValueMeta(v);
}
return rowMeta;
}
catch(SQLException ex)
{
throw new KettleDatabaseException("Error getting row information from database: ", ex);
}
}
就是这样”If we do lazy conversion, we need to find out about the encoding“,直接勾选”允许延迟转换“即可:
这样在从数据库读取的数据就能保持原有字符集,不因默认强制使用utf8导致乱码,在输出时指定文件字符集,就会解决导出到文件中的乱码问题。
如果导入到目标表的字符集与源表不同,需要在入库前用select values做字符转换(纯属废话,相同就不会有乱码了):
整个流程如下
这样,无论到文件还是目标表,都不会再有乱码了。
如果以上还无法解决,可以在Table Input 和Table Output的数据库连接高级选项中设置当前session的字符集;以下除了可以设置session 的字符集,还可以设置日期格式等。
通过以上设置还无法解决,只能归结为RP不好了O(∩_∩)O~
- 大小: 3.4 KB
- 大小: 29.4 KB
- 大小: 10.4 KB
- 大小: 23.6 KB
分享到:
相关推荐
在IT领域,数据库连接是数据集成过程中的关键环节,特别是在使用工具如Kettle(也称为Pentaho Data Integration,简称PDI)时。Kettle是一款强大的ETL(Extract, Transform, Load)工具,用于从各种数据源抽取数据,...
本文将围绕"Kettle 7.1数据库连接驱动包"这一主题,深入探讨其关键知识点,以解决实际操作中可能遇到的问题。 一、驱动包的重要性 1. 数据库连接的核心:数据库连接驱动包是Kettle与各种数据库进行通信的桥梁,它...
神通数据库的Kettle数据库插件是专为解决Kettle工具在处理神通数据库时的兼容性问题而设计的扩展。Kettle,又称Pentaho Data Integration(PDI),是一款强大的ETL(提取、转换、加载)工具,广泛应用于数据集成与...
Kettle 推送数据到 Mysql 数据库表时乱码解决方案 Kettle 是一个功能强大且流行的数据集成工具,广泛应用于数据抽取、转换和加载(ETL)过程中。然而,在使用 Kettle 将数据推送到 Mysql 数据库表时,可能会出现...
它提供了一个轻量级的解决方案,允许Kettle连接到SQL Server数据库,进行数据操作。 综上所述,这些驱动文件对于Kettle用户来说至关重要,因为它们确保了Kettle能够无缝地与Oracle、MySQL和SQL Server等主流数据库...
本示例中的"Kettle同步数据库所有的表数据到其他库.rar"是一个具体的应用场景,即利用Kettle将一个数据库的所有表数据同步到另一个具有相同表结构的数据库中。这里,我们不仅讨论如何实现这个功能,还将深入探讨...
在IT行业中,数据库是数据管理和存储的核心工具,而Kettle(又称Pentaho Data Integration,简称PDI)是一款强大的ETL(Extract, Transform, Load)工具,用于在不同数据源之间进行数据迁移、清洗和转换。Kettle支持...
使用kettle同步数据库表。网上找教程找了一天。终于弄好了。将两个数据库连接改成你自己的。sql也要改,然后把后面步骤的字段重新获取一下。然后就可以同步数据了。数据来源表增删改都可以同步。参考一下吧
kettle8.3数据库资源库表数据字典.xlsx
"kettle连接数据库相关jar包"指的是为了使Kettle能与不同类型的数据库建立连接,需要引入特定的数据库驱动JAR文件。这些JAR文件包含了数据库供应商提供的API,使得Kettle可以理解和执行SQL语句,从而读取或写入数据...
我当前调试的是kettle 5.4.0.1版本,修复job中发送邮件时候中文乱码问题: 替换 data-integration\lib\kettle-engine-5.4.0.1-130.jar 这个jar包下 data-integration\lib\kettle-engine-5.4.0.1-130.jar\org\...
2. Oracle:Oracle是企业级的数据库解决方案,支持大规模的数据处理。Oracle的JDBC驱动分为thin和thick两种模式,其中thin模式更常见,对应的JAR文件可能是`ojdbc6.jar`或`ojdbc8.jar`。配置Oracle连接时,需要填写...
kettle 各种数据库之间数据导出导入
这个“kettle数据库驱动包.zip”文件显然是为Kettle准备的,包含了对多种主流数据库系统的驱动支持,包括MySQL、Oracle和DB2。这些驱动程序是连接到特定数据库所必需的组件,因为它们使得Kettle能够理解和通信与这些...
本教程将详细介绍如何在Kettle中进行简单的参数化配置来连接数据库,以及如何通过Shell脚本来传递参数并调度Kettle作业。 首先,我们来看“Kettle简单参数化配置连接数据库”。在Kettle中,数据库连接通常需要提供...
在使用kettle时,如果没有放入驱动包,...这时我们只需要把所对应数据库的驱动放入到kettle目录下的lib目录中,重新打开就可以解决。 这个压缩包里包括Oracle、MySQL、SQLserver、达梦的驱动包,一般是足够用了。
在"Kettle批量数据库操作流程脚本"中,我们主要讨论的是如何利用Kettle进行多源数据抽取并整合到单一目标数据库的过程。这个过程通常涉及到以下几个关键步骤: 1. **数据源定义**:在Kettle中,数据源可以是各种...
【Kettle】数据库数据转移工具 Kettle,也被称为Pentaho Data Integration(PDI),是一种强大的ETL(Extract, Transform, Load)工具,用于在不同的数据源之间进行数据迁移、清洗和转换。它由社区驱动,是Pentaho ...
本资源包"Kettle常用的数据库驱动脚本"包含了Kettle连接到不同数据库所需的驱动,包括Oracle、MySQL、SQL Server和Access。理解这些驱动及其使用方法对于有效利用Kettle进行数据操作至关重要。 首先,让我们逐一...
总的来说,Kettle连接ClickHouse是一种强大的数据处理解决方案,它结合了Kettle的ETL功能和ClickHouse的高性能分析能力,为大数据处理提供了便利。在实践中,不断学习和优化这些工具的使用,能够极大地提升数据工作...