使用COPY FROM导入时报错“invalid byte sequence for encoding "UTF8": 0x00”
问题现象
使用COPY FROM导入GaussDB(DWS)时,报错: “ invalid byte sequence for encoding "UTF8": 0x00.”。
原因分析
业务数据文件从Oracle导入,文件编码为utf-8。该报错还会提示行数,由于文件特别大,vim命令打不开文件,于是用sed命令把报错行数提出来,再用vim命令打开,发现并没有什么异常。用split命令按行数切割后,部分文件也可以导入。
经分析GaussDB(DWS)的varchar型的字段或变量不允许含有'\0'(也即数值0x00、UTF编码'\u0000')的字符串 ,需在导入前去掉字符串中的'\0'。
处理方法
用sed命令替换0x00后,即可成功导入。
1
|
sed -i 's/\x00//g;' file |
参数说明:
- -i表示在原文件直接替换。
- s/表示替换。
- /g表示全局替换。