sql >> Databasteknik >  >> RDS >> Mysql

utf8mb4-inställning för Talend - fungerar inte

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 :




  1. Vilka är dina favoritböcker av Ruby on Rails och varför?

  2. PostgreSQL-installation på Docker

  3. När du använder MySQL's FOR UPDATE-låsning, vad är exakt låst?

  4. Hur to_number()-funktionen fungerar i PostgreSQL