Zorg er eerst voor dat uw server correct is geconfigureerd om utf8mb4 te gebruiken.Volg deze zelfstudie , moet u het volgende toevoegen aan uw my.cnf (of my.ini als u Windows gebruikt):
[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
Dat vertelt de MySQL-server om utf8mb4 te gebruiken en elke codering die door de client is ingesteld te negeren.
Daarna hoefde ik geen extra eigenschappen op de MySQL-verbinding in Talend in te stellen. Ik heb deze query uitgevoerd in Talend om de codering te controleren die erdoor is ingesteld:
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
En het keerde terug:
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
De volgende test om een stapel poep in te voegen werkt:
Bijwerken
Als je native MySQL-componenten gebruikt in Talend 6.3.1, krijg je mysql-connector-java-5.1.30-bin.jar
, die verondersteld wordt automatisch de utf8mb4 te detecteren die door de server wordt gebruikt, maar om de een of andere reden (bug?) doet het dat niet.
Ik schakelde over op het gebruik van JDBC-componenten en downloadde de nieuwste mysql connector
(mysql-connector-java-5.1.45-bin.jar
), heb ik het werkend gekregen door deze aanvullende parameters in te stellen op de tJDBCConnection
onderdeel :
useUnicode=true&characterEncoding=utf-8
(zelfs als ik utf-8 specificeer, zegt de doc dat het het zal behandelen als utf8mb4)
Zo ziet mijn baan er nu uit: