Se först till att din server är korrekt konfigurerad för att använda utf8mb4. Genom att följa denna handledning måste du lägga till följande i din my.cnf (eller my.ini om du använder 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
Det säger till MySQL-servern att använda utf8mb4 och ignorera all kodning som ställts in av klienten.
Därefter behövde jag inte ställa in några ytterligare egenskaper på MySQL-anslutningen i Talend. Jag har kört den här frågan i Talend för att kontrollera kodningen som den har ställt in :
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
Och det returnerade:
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
Följande test för att sätta in en hög med bajs fungerar:
Uppdatera
Genom att använda inbyggda MySQL-komponenter i Talend 6.3.1 får du mysql-connector-java-5.1.30-bin.jar
, som är tänkt att automatiskt upptäcka utf8mb4 som används av servern, men av någon anledning (bugg?) gör den inte det.
Jag bytte till att använda JDBC-komponenter och laddade ner den senaste mysql anslutare
(mysql-connector-java-5.1.45-bin.jar
), fick jag det att fungera genom att ställa in dessa ytterligare parametrar på tJDBCConnection
komponent :
useUnicode=true&characterEncoding=utf-8
(även om jag anger utf-8, säger doktorn att det kommer att behandla det som utf8mb4)
Så här ser mitt jobb ut nu :