まず、サーバーがutf8mb4を使用するように適切に構成されていることを確認します。次のチュートリアル 、my.cnf(またはWindowsを使用している場合はmy.ini)に以下を追加する必要があります:
[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を使用し、クライアントによって設定されたエンコーディングを無視するようになります。
その後、TalendのMySQL接続に追加のプロパティを設定する必要はありませんでした。 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|
'------------------------+------------------'
うんちの山を挿入するための次のテストは機能します:
更新
Talend 6.3.1でネイティブMySQLコンポーネントを使用すると、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として扱われると書かれています)
これが私の仕事の今の様子です: