Najpierw upewnij się, że Twój serwer jest prawidłowo skonfigurowany do korzystania z utf8mb4.Postępując zgodnie z tym samouczkiem , musisz dodać następujące elementy do my.cnf (lub my.ini w systemie 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
To mówi serwerowi MySQL, aby używał utf8mb4 i ignorował kodowanie ustawione przez klienta.
Po tym nie musiałem ustawiać żadnych dodatkowych właściwości połączenia MySQL w Talend. Wykonałem to zapytanie w Talend, aby sprawdzić ustawione przez nie kodowanie :
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
I wrócił:
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
Poniższy test wstawiania kupy działa:
Aktualizacja
Używając natywnych komponentów MySQL w Talend 6.3.1, otrzymujesz mysql-connector-java-5.1.30-bin.jar
, który ma automatycznie wykrywać utf8mb4 używany przez serwer, ale z jakiegoś powodu (błąd?) tego nie robi.
Przełączyłem się na używanie komponentów JDBC i pobrałem najnowszy mysql złącze
(mysql-connector-java-5.1.45-bin.jar
), udało mi się uruchomić, ustawiając te dodatkowe parametry w tJDBCConnection
składnik :
useUnicode=true&characterEncoding=utf-8
(nawet jeśli określam utf-8, dokument mówi, że potraktuje go jako utf8mb4)
Oto jak teraz wygląda moja praca: