【发布时间】:2017-01-22 10:32:25
【问题描述】:
我是 AWS 数据管道的新手。我创建了一个成功的数据管道,将所有内容从 RDS 拉到 S3 存储桶。一切正常。我在 S3 存储桶中看到了我的 .csv 文件。但我在我的表中存储西班牙名称,在 csv 中我看到“Garc�a”而不是“García”
【问题讨论】:
标签: mysql amazon-web-services amazon-rds amazon-data-pipeline
我是 AWS 数据管道的新手。我创建了一个成功的数据管道,将所有内容从 RDS 拉到 S3 存储桶。一切正常。我在 S3 存储桶中看到了我的 .csv 文件。但我在我的表中存储西班牙名称,在 csv 中我看到“Garc�a”而不是“García”
【问题讨论】:
标签: mysql amazon-web-services amazon-rds amazon-data-pipeline
看起来使用了错误的代码页。只需参考正确的代码页,就可以了。以下主题可能会有所帮助:Text files uploaded to S3 are encoded strangely?
【讨论】:
AWS DataPipeline 使用 Java 实现,并使用 JDBC(Java 数据库连接)驱动程序(具体而言,在您的情况下,MySQL Connector/J 用于 MySQL)连接到数据库。根据文档Using Character Sets and Unicode部分,连接器使用的字符集是根据RDS/MySQL服务器上的character_set_server系统变量自动确定的,默认设置为latin1。
如果此设置对您的应用程序不正确(在 MySQL 客户端中运行 SHOW VARIABLES LIKE 'character%'; 以确认),您有两个选项来纠正此问题:
character_set_server 设置为 utf8。要从 RDS 控制台永久进行此更改,请参阅 Modifying Parameters in a DB Parameter Group 了解说明。在您的 DataPipeline 配置中传递额外的 JDBC 属性以覆盖 JDBC 连接使用的字符集。对于这种方法,请将以下 JDBC 属性添加到您的 RdsDatabase 或 JdbcDatabase 对象(请参阅 properties reference):
"jdbcProperties": "useUnicode=true,characterEncoding=UTF-8"
【讨论】:
jdbcProperties 的语法不是 100% 有信心——文档只说“将为此设置为 jdbc 连接上的属性的 A=B 对数据库”。相反,它可能是useUnicode=true&characterEncoding=UTF-8 或完全不同的东西。如果您尝试此选项,请告诉我任何一种形式是否有效。
jdbcProperties 键,每个属性对应一个:"jdbcProperties": "useUnicode=true", "jdbcProperties": "characterEncoding=UTF-8"; 2. 将数组传递给jdbcProperties:"jdbcProperties": ["useUnicode=true", "characterEncoding=UTF-8"]。让我知道是否可行。
这个问题和Text files uploaded to S3 are encoded strangely?有点相似。如果是这样,请在此处参考我的答案。
【讨论】: