Mysql
 sql >> Database >  >> RDS >> Mysql

Impostazione utf8mb4 per talend - non funzionante

Innanzitutto, assicurati che il tuo server sia configurato correttamente per utilizzare utf8mb4. Dopo questo tutorial , devi aggiungere quanto segue al tuo my.cnf (o my.ini se sei su 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

Ciò indica al server MySQL di utilizzare utf8mb4 e di ignorare qualsiasi codifica impostata dal client.
Dopodiché, non è stato necessario impostare alcuna proprietà aggiuntiva sulla connessione MySQL in Talend. Ho eseguito questa query in Talend per verificare la codifica impostata da esso:

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

Ed è tornato:

|=-----------------------+-----------------=|
|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|
'------------------------+------------------'

Il seguente test per inserire una pila di cacca funziona:

Aggiorna

Utilizzando componenti MySQL nativi in ​​Talend 6.3.1, ottieni mysql-connector-java-5.1.30-bin.jar , che dovrebbe rilevare automaticamente l'utf8mb4 utilizzato dal server, ma per qualche motivo (bug?) non lo sta facendo.
Sono passato all'utilizzo dei componenti JDBC e ho scaricato l'ultimo mysql connettore (mysql-connector-java-5.1.45-bin.jar ), l'ho fatto funzionare impostando questi parametri aggiuntivi su tJDBCConnection componente :

useUnicode=true&characterEncoding=utf-8

(anche se sto specificando utf-8, il documento dice che lo tratterà come utf8mb4)

Ecco come appare il mio lavoro ora: