问题
用kettle对mysql数据迁移到PostgreSQL时,执行到一半报错:
was aborted: ERROR: invalid byte sequence for encoding "UTF8": 0x00
mysql数据库字符集为 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