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: