Първо се уверете, че вашият сървър е правилно конфигуриран да използва utf8mb4. Следвайки този урок , трябва да добавите следното към вашия my.cnf (или my.ini, ако сте под 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
Това казва на MySQL сървъра да използва utf8mb4 и да игнорира кодирането, зададено от клиента.
След това не трябваше да задавам никакви допълнителни свойства на MySQL връзката в Talend. Изпълних тази заявка в Talend, за да проверя зададеното от нея кодиране:
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
И се върна:
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
Следният тест за вмъкване на купчина изпражнения работи:
Актуализиране
Използвайки собствени компоненти на MySQL в Talend 6.3.1, получавате mysql-connector-java-5.1.30-bin.jar
, който трябва да открие автоматично utf8mb4, използван от сървъра, но по някаква причина (бъг?) не го прави.
Превключих на използване на JDBC компоненти и изтеглих най-новия mysql конектор
(mysql-connector-java-5.1.45-bin.jar
), накарах го да работи, като зададох тези допълнителни параметри на tJDBCConnection
компонент :
useUnicode=true&characterEncoding=utf-8
(дори и да посоча utf-8, документът казва, че ще го третира като utf8mb4)
Ето как изглежда моята работа сега :