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ë tuberculata
和 Ocythoe 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
我正在使用 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ë tuberculata
和 Ocythoe 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