utt8mb4为talend设置 - 不工作

问题描述 投票:1回答:1

我正在将数据从sql server迁移到mysql。我正在使用工具Talend(ETL)。

问题来自我在源代码(sql server)中有emojis时,它没有插入到mysql中的表中。所以,我知道我必须在mysql端使用utf8mb4。

必须设置客户端设置字符编码,才能插入表情符号。数据库,表和服务器都在utf8mb4上

但是,客户端即talend不是utf8mb4。那么我在哪里设置它?

我尝试在tmysqloutput的其他参数中使用'set names utf8mb4'。但这不起作用

我已经坚持了几天,对此的任何帮助将不胜感激

更新:

这个工作现在看起来像这样。但是,笑脸还是以'?'的形式出口

enter image description here

谢谢Rathi

mysql sql-server talend
1个回答
1
投票

首先,使服务器配置正确使用utf8mb4。在这个tutorial之后,您需要将以下内容添加到my.cnf(如果您使用的是Windows,请添加my.ini):

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

这告诉MySQL服务器使用utf8mb4并忽略客户端设置的任何编码。 之后,我不需要在Talend中的MySQL连接上设置任何其他属性。我在Talend中执行了这个查询来检查它设置的编码:

SHOW VARIABLES 
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'

它返回:

|=-----------------------+-----------------=|
|Variable_Name           |Value             |
|=-----------------------+-----------------=|
|character_set_client    |utf8mb4           |
|character_set_connection|utf8mb4           |
|character_set_database  |utf8mb4           |
|character_set_filesystem|binary            |
|character_set_results   |                  |
|character_set_server    |utf8mb4           |
|character_set_system    |utf8              |
|collation_connection    |utf8mb4_unicode_ci|
|collation_database      |utf8mb4_unicode_ci|
|collation_server        |utf8mb4_unicode_ci|
'------------------------+------------------'

以下测试插入一堆大便工程:

enter image description here

enter image description here

更新

在Talend 6.3.1中使用本机MySQL组件,你会得到mysql-connector-java-5.1.30-bin.jar,它应该自动检测服务器使用的utf8mb4,但出于某种原因(bug?)它没有这样做。 我转而使用JDBC组件,并下载了最新的mysql connectormysql-connector-java-5.1.45-bin.jar),我通过在tJDBCConnection组件上设置这些附加参数来实现它:

useUnicode=true&characterEncoding=utf-8

(即使我指定utf-8,文档说它会将其视为utf8mb4)

这就是我现在的工作:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.