我正在使用 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
组件,我会得到正确的输出:Ocythoe 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”,但都没有用...
同样在 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
关于mysql - Talend 和字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49258751/