Talend 和字符编码

Talend and character encoding

我正在使用 talend 将数据从旧数据库传输到新数据库。旧数据库是 PostgreSQL,新数据库是 MySQL。

但我有问题,因为在旧数据库中有这些行:

id      lft     rgt     rank_id    name_sci
------------------------------------------------------
6530    6137    6138    88         Ocythoë tuberculata
6340    6127    6128    88         Ocythoe tuberculata

注意上面两点e

所以我有

tPsqlInput --> tFilterRow --> tMap --> tMysqlOutput

但是,我收到错误消息:Duplicate entry 'Ocythoe tuberculata' for key 'bio_taxons_name_sci_unique' 如果我在插入 MySQL 之前放置 tLogRow 组件,我会得到正确的输出:Ocythoë tuberculataOcythoe tuberculata

我试过直接插入数据库:

into bio_taxons (name_sci, created_by, taxonomic_rank_id ) values ('Ocythoë', 1, 10);

它工作正常,并正确插入带点的 e,当我这样做时 SELECT 它表明它已成功插入到行上方。

但是来自 talend,出于某种原因,它将 ëe 有两个点)替换为普通的 e(没有点)。

而且我不知道如何解决这个问题。我试过编辑 MySQL 连接,但似乎没有任何效果:

这是当前的 mysql 连接字符串:

jdbc:mysql://:3306/fis?noDatetimeStringSync=true&characterEncoding=Cp1252

我试过 "utf8"、"utf-8"、"latin1" "utf8mb4" 但 none 有效...

也在mysql:

mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| latin1                   | latin1_swedish_ci    |
+--------------------------+----------------------+

我建议全面使用 utf8 字符集和相应的排序规则,以便您适应每个字符(如果您还需要表情符号,请选择 utf8mb4)。

为了将您的数据库转换为 UTF8:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci

如果服务器编码尚未采用 utf8,您可能还需要更改它。检查它:

SHOW VARIABLES WHERE variable_name LIKE 'char%'

然后指示JDBC驱动使用utf8编码。您的连接字符串变为:

jdbc:mysql://:3306/fis?noDatetimeStringSync=true&useUnicode=true&characterEncoding=utf-8