You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS Glue ETL写入MySQL时泰文显示为???的解决方法

解决AWS Glue ETL写入MySQL时泰文显示为'???'的问题

泰文显示乱码的核心原因是编码不匹配,需从MySQL目标端配置、Glue写入参数、作业环境编码三方面调整:

1. 修正MySQL目标表的字符集

MySQL的utf8实际是utf8mb3,仅支持基础Unicode字符,虽泰文大多在此范围内,但为确保兼容性,建议将目标表及列的字符集改为utf8mb4,并使用泰文专属排序规则:

-- 修改表字符集
ALTER TABLE your_target_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_ci;

-- 若需单独修改列
ALTER TABLE your_target_table MODIFY COLUMN thai_column VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_ci;

2. 配置Glue写入MySQL的编码参数

你当前仅在读取时设置了charset,但写入环节的编码配置才是关键。需在JDBC连接参数中明确指定Unicode编码:

# 读取源数据(原读取配置可保留)
dyf = glueContext.create_dynamic_frame.from_catalog( 
     database="test",
     table_name="test",
     transformation_ctx="test_node", 
     additional_options={"charset": "utf8"}
 )

# 写入MySQL的连接配置
write_options = {
    "url": "jdbc:mysql://your-mysql-host:3306/your_database?useUnicode=true&characterEncoding=utf8mb4",
    "dbtable": "your_target_table",
    "user": "your_db_user",
    "password": "your_db_password",
    "charset": "utf8mb4"
}

# 执行写入
glueContext.write_dynamic_frame.from_jdbc_conf(
    frame=dyf,
    catalog_connection="your_glue_jdbc_connection_name", # 替换为你的Glue JDBC连接名
    connection_options=write_options,
    transformation_ctx="write_to_mysql"
)

重点:URL中必须包含useUnicode=true&characterEncoding=utf8mb4,同时charset参数设为utf8mb4,确保Glue与MySQL之间的编码传输一致。

3. 确保Glue作业环境编码为UTF-8

在作业开头添加编码设置(Python 2需执行,Python 3可省略,但添加无影响):

import sys
if sys.version_info[0] == 2:
    reload(sys)
    sys.setdefaultencoding('utf-8')

内容的提问来源于stack exchange,提问作者GIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:21:08