Trước tiên, hãy đảm bảo rằng máy chủ của bạn được định cấu hình đúng cách để sử dụng utf8mb4. Làm theo hướng dẫn này , bạn cần thêm phần sau vào my.cnf của mình (hoặc my.ini nếu bạn đang sử dụng 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
Điều đó yêu cầu máy chủ MySQL sử dụng utf8mb4 và bỏ qua bất kỳ mã hóa nào do máy khách đặt.
Sau đó, tôi không cần thiết lập bất kỳ thuộc tính bổ sung nào trên kết nối MySQL trong Talend. Tôi đã thực hiện truy vấn này trong Talend để kiểm tra mã hóa do nó đặt:
SHOW VARIABLES
WHERE Variable_name LIKE 'character\\_set\\_%' OR Variable_name LIKE 'collation%'
Và nó đã trả lại:
|=-----------------------+-----------------=|
|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|
'------------------------+------------------'
Thử nghiệm sau để chèn một đống phân có tác dụng:
Cập nhật
Sử dụng các thành phần MySQL gốc trong Talend 6.3.1, bạn nhận được mysql-connector-java-5.1.30-bin.jar
, vốn được cho là sẽ tự động phát hiện utf8mb4 được máy chủ sử dụng, nhưng vì một số lý do (lỗi?), nó không làm điều đó.
Tôi đã chuyển sang sử dụng các thành phần JDBC và tải xuống mysql trình kết nối
(mysql-connector-java-5.1.45-bin.jar
), Tôi đã làm cho nó hoạt động bằng cách đặt các thông số bổ sung này trên tJDBCConnection
thành phần:
useUnicode=true&characterEncoding=utf-8
(ngay cả khi tôi chỉ định utf-8, tài liệu cho biết nó sẽ coi nó là utf8mb4)
Đây là công việc của tôi bây giờ: