Mysql Talend与字符编码
我正在使用talend将数据从旧数据库传输到新数据库。旧数据库是PostgreSQL,新数据库是MySQL 但我有问题,因为在旧数据库中有以下行:Mysql Talend与字符编码,mysql,etl,talend,collate,Mysql,Etl,Talend,Collate,我正在使用talend将数据从旧数据库传输到新数据库。旧数据库是PostgreSQL,新数据库是MySQL 但我有问题,因为在旧数据库中有以下行: id lft rgt rank_id name_sci ------------------------------------------------------ 6530 6137 6138 88 Ocythoë tuberculata 6340 6127 6128
id lft rgt rank_id name_sci
------------------------------------------------------
6530 6137 6138 88 Ocythoë tuberculata
6340 6127 6128 88 Ocythoe tuberculata
注意上面的两点e
所以我有
tPsqlInput --> tFilterRow --> tMap --> tMysqlOutput
然而,我得到了一个错误:重复输入“Oythoe tuberculata”,用于关键的“bio\u分类单元\u name\u sci\u unique”
如果我在插入MySQL之前放入tLogRow
组件,我会得到正确的输出:Ocythoeëtuberculata
和Ocythoe tuberculata
我已尝试直接插入数据库:
into bio_taxons (name_sci, created_by, taxonomic_rank_id ) values ('Ocythoë', 1, 10);
它工作了,并且正确地插入了带有点的e,当我选择时,它表明它已经成功地插入到了行的上方
但从talend开始,出于某种原因,它用普通的e
(不带点)取代了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字符集和相应的排序规则,这样您可以适应每个字符(如果您还需要表情符号) 要将数据库转换为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
我只执行了
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8\U unicode\U ci
,并更改了JDBC连接字符串,它工作正常,非常感谢您我很高兴我能提供帮助;)嘿,问题中的问题已解决,但还有一个问题,它将字母č
更改为?
,但tLogRow组件在输出中显示了正确的字符串…非常抱歉,我错过了您的评论;你能解决你的问题吗?是的,这是我的连接字符串的问题,不知何故我把它改成了默认的xD