Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

configuração utf8mb4 para talend - não funciona


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: