Primeiro, certifique-se de que seu servidor esteja configurado corretamente para usar utf8mb4. Seguindo este tutorial , você precisa adicionar o seguinte ao seu my.cnf (ou my.ini se estiver no Windows):
[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
Isso diz ao servidor MySQL para usar utf8mb4 e ignorar qualquer codificação definida pelo cliente.
Depois disso, não precisei definir nenhuma propriedade adicional na conexão MySQL no Talend. Eu executei esta consulta no Talend para verificar a codificação definida por ele:
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
E voltou:
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
O seguinte teste para inserir uma pilha de cocô funciona:
Atualizar
Usando componentes MySQL nativos no Talend 6.3.1, você obtém
mysql-connector-java-5.1.30-bin.jar
, que supostamente detecta automaticamente o utf8mb4 usado pelo servidor, mas por algum motivo (bug?) não está fazendo isso.Mudei para usar componentes JDBC e baixei o mysql mais recente conector (
mysql-connector-java-5.1.45-bin.jar
), consegui configurar esses parâmetros adicionais no tJDBCConnection
componente:useUnicode=true&characterEncoding=utf-8
(mesmo se eu estiver especificando utf-8, o documento diz que o tratará como utf8mb4)
Veja como está meu trabalho agora: