Stellen Sie zunächst sicher, dass Ihr Server ordnungsgemäß für die Verwendung von utf8mb4 konfiguriert ist. Folgen Sie diesem Tutorial , müssen Sie Folgendes zu Ihrer my.cnf (oder my.ini unter Windows) hinzufügen:
[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
Das weist den MySQL-Server an, utf8mb4 zu verwenden und alle vom Client festgelegten Codierungen zu ignorieren.
Danach musste ich keine zusätzlichen Eigenschaften für die MySQL-Verbindung in Talend festlegen. Ich habe diese Abfrage in Talend ausgeführt, um die von ihr festgelegte Codierung zu überprüfen:
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
Und es kam zurück:
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
Der folgende Test zum Einfügen eines Haufens Kacke funktioniert:
Aktualisieren
Wenn Sie native MySQL-Komponenten in Talend 6.3.1 verwenden, erhalten Sie mysql-connector-java-5.1.30-bin.jar
, das automatisch das vom Server verwendete utf8mb4 erkennen soll, aber aus irgendeinem Grund (Bug?) tut es das nicht.
Ich bin auf die Verwendung von JDBC-Komponenten umgestiegen und habe das neueste mysql Konnektor
(mysql-connector-java-5.1.45-bin.jar
), habe ich es zum Laufen gebracht, indem ich diese zusätzlichen Parameter auf tJDBCConnection
gesetzt habe Komponente :
useUnicode=true&characterEncoding=utf-8
(selbst wenn ich utf-8 spezifiziere, sagt das Dokument, dass es als utf8mb4 behandelt wird)
So sieht mein Job jetzt aus :