Mysql
 sql >> Base de données >  >> RDS >> Mysql

Paramètre utf8mb4 pour talend - ne fonctionne pas

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 :