我正在将数据从sql server迁移到mysql。我正在使用工具Talend(ETL)。
问题来自我在源代码(sql server)中有emojis时,它没有插入到mysql中的表中。所以,我知道我必须在mysql端使用utf8mb4。
必须设置客户端设置字符编码,才能插入表情符号。数据库,表和服务器都在utf8mb4上
但是,客户端即talend不是utf8mb4。那么我在哪里设置它?
我尝试在tmysqloutput的其他参数中使用'set names utf8mb4'。但这不起作用
我已经坚持了几天,对此的任何帮助将不胜感激
更新:
这个工作现在看起来像这样。但是,笑脸还是以'?'的形式出口
谢谢Rathi
首先,使服务器配置正确使用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|
'------------------------+------------------'
以下测试插入一堆大便工程:
更新
在Talend 6.3.1中使用本机MySQL组件,你会得到mysql-connector-java-5.1.30-bin.jar
,它应该自动检测服务器使用的utf8mb4,但出于某种原因(bug?)它没有这样做。
我转而使用JDBC组件,并下载了最新的mysql connector(mysql-connector-java-5.1.45-bin.jar
),我通过在tJDBCConnection
组件上设置这些附加参数来实现它:
useUnicode=true&characterEncoding=utf-8
(即使我指定utf-8,文档说它会将其视为utf8mb4)
这就是我现在的工作: