Tout d'abord, assurez-vous que votre serveur est correctement configuré pour utiliser utf8mb4.Suivez ce tutoriel , vous devez ajouter ce qui suit à votre my.cnf (ou my.ini si vous êtes sous 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
Cela indique au serveur MySQL d'utiliser utf8mb4 et d'ignorer tout encodage défini par le client.
Après cela, je n'ai pas eu besoin de définir de propriétés supplémentaires sur la connexion MySQL dans Talend. J'ai exécuté cette requête dans Talend pour vérifier l'encodage défini par celui-ci :
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
Et il a renvoyé :
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
Le test suivant pour insérer un tas de caca fonctionne :
Mettre à jour
En utilisant des composants MySQL natifs dans Talend 6.3.1, vous obtenez mysql-connector-java-5.1.30-bin.jar
, qui est censé détecter automatiquement l'utf8mb4 utilisé par le serveur, mais pour une raison quelconque (bug ?), il ne le fait pas.
Je suis passé à l'utilisation de composants JDBC et j'ai téléchargé le dernier mysql connecteur
(mysql-connector-java-5.1.45-bin.jar
), je l'ai fait fonctionner en définissant ces paramètres supplémentaires sur le tJDBCConnection
composant :
useUnicode=true&characterEncoding=utf-8
(même si je spécifie utf-8, la doc dit qu'il le traitera comme utf8mb4)
Voici à quoi ressemble mon travail maintenant :