DataX 常见问题及解决方式
1. 同步到 PG
出现 invalid byte sequence for encoding "UTF8": 0x00
#
invalid byte sequence for encoding "UTF8": 0x00(注意:若不是 0x00
则很可能是字符集设置有误),是 PostgreSQL
独有的错误信息,直接原因是 varchar
型的字段或变量不接受含有 '\0'
(也即数值 0x00
、UTF
编码 '\u0000'
)的字符串 。官方给出的解决方法:事先去掉字符串中的 '\0'
,例如在 Java
代码中使用 str.replaceAll('\u0000', '')
,貌似这是目前唯一可行的方法。
具体方法:
// com.alibaba.datax.plugin.writer.postgresqlwriter.PostgresqlWriter.Task#commonRdbmsWriterSlave
this.commonRdbmsWriterSlave = new CommonRdbmsWriter.Task(DATABASE_TYPE){
@Override
public String calcValueHolder(String columnType){
...
}
@Override
protected PreparedStatement fillPreparedStatementColumnType(PreparedStatement preparedStatement, int columnIndex, int columnSqltype, String typeName, Column column) throws SQLException {
if (columnSqltype == Types.CHAR || columnSqltype == Types.VARCHAR) {
String value = column.asString();
if (value != null) {
preparedStatement.setString(columnIndex + 1, value.replaceAll("\u0000", ""));
return preparedStatement;
}
}
return super.fillPreparedStatementColumnType(preparedStatement, columnIndex, columnSqltype, typeName, column);
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)