问题
用kettle对mysql数据迁移到PostgreSQL时,执行到一半报错:
was aborted: ERROR: invalid byte sequence for encoding "UTF8": 0x00mysql数据库字符集为 utf8mb4, PostgreSQL字符集为 UTF8, 本以为是不兼容的字符导致。故编辑目标库的 DB连接 -> 选项, 设置命名参数 characterEncoding 值为 uft8. 然而并无效果。
原因
invalid byte sequence for encoding "UTF8": 0x00(注意:若不是0x00则很可能是字符集设置有误),是PostgreSQL独有的错误信息,因为PostgreSQL内部采用C语言风格的字符串(以0x00)表示结尾,varchar型的字段或变量不接受含有'\0'(也即数值0x00、UTF编码'\u0000')的字符串 。
解决
替换掉 0x00 字符
# JAVA
str..replace("\u0000", "").replace("\\u0000", ""));
# SQL
SELECT replace(review_content, char(0), '') as 评论内容 [FROM reviews_table]一次倍受折磨的“invalid byte sequence for encoding "UTF8": 0x00”事件的经验教训 https://www.cnblogs.com/cjkcss/articles/11774051.html
kettle:ERROR: invalid byte sequence for encoding “UTF8”: 0x00 https://blog.csdn.net/chulang3290/article/details/100759073
ERROR: invalid byte sequence for encoding "UTF8": 0x00与java中\u0000处理 https://www.modb.pro/db/88526
使用kettle抽取数据出现中文乱码问题解决 https://blog.csdn.net/sunfly01/article/details/107689093
 沙滩星空的博客
沙滩星空的博客