Mysql
 sql >> Datenbank >  >> RDS >> Mysql

utf8mb4-Einstellung für Talend - funktioniert nicht

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 :