我在这里修改我的问题。我正在使用AWS DMS工具从Oracle迁移到PostgreSQL。源(oracle)字符集是AL32UTF8并且目标(Pg)字符集设置为UT8。从Oracle迁移到PostgreSQL时出现无效的UTF8字符
所以在源我有一个数据类型VARCHAR2(4000),在那里我已经存储了这样的东西列:
This will be my first time visiting Seattle.
当我试图迁移此,我得到以下错误:
ERROR: invalid byte sequence for encoding "UTF8": 0xed 0xa0 0xbd
有一个在DMS的方式来跳过这一点,但问题是我需要运行DMS每次和等待它给无效字节序列错误,然后让过去吧。到目前为止,我有这么多:
0xed 0xa4 0x88
0xed 0xbd 0x95
0xed 0xa9 0x8e
0xed 0xbc 0xb8
0xed 0xaa 0xbe
0xed 0xba 0xb5
0xed 0xaf 0x83
0xed 0xb5 0xaa
0xed 0xa0 0xbc
0xed 0xbc 0x9f
0xed 0xa0 0xbd
0xed 0xb8 0xa0
0xed 0xbe 0x88
0xed 0xb1 0x8e
0xed 0xb1 0x8e
0xed 0xb1 0x8d
0xed 0xb3 0x99
0xed 0xb1 0x9f
0xed 0xbe 0xa7
0xed 0xb1 0x8c
0xed 0xa0 0xbe
0xed 0xb4 0x96
0xed 0xba 0x80
0xed 0xb4 0xb1
0xed 0xb0 0xa7
0xed 0xbe 0xb8
0xed 0xbe 0xb5
0xed 0xb7 0xbb
0xed 0xb1 0x86
0xed 0xbe 0xb6
0xed 0xbf 0x8a
0xed 0xb0 0xab
0xed 0xb0 0x95
0xed 0xb0 0x94
0xed 0xb0 0x99
0xed 0xb0 0xb1
0xed 0xbf 0x84
0xed 0xba 0x82
0xed 0xb4 0xa8
0xed 0xb0 0xaf
0xed 0xb0 0xb8
0xed 0xb3 0x9e
0xed 0xb4 0xa7
0xed 0xbe 0x81
0xed 0xb1 0x87
从这里开始,论坛的帖子之一,我得到了下面的查询:
select CASE
INSTR (
RAWTOHEX (
utl_raw.cast_to_raw (
utl_i18n.raw_to_char (
utl_raw.cast_to_raw (<your_column>)
, 'utf8'
)
)
)
, 'EFBFBD'
)
WHEN 0 THEN 'OK'
ELSE 'FAIL'
END
from <your_table>
;
是否有可能修改上面的查询拿出正则表达式来检查所有这些非法的UTF8编码。
此外,我能够改变CLIENT_ENCODING到LATIN1后成功地进行迁移,但我得到这个在PG结束:
This will be my first time visiting Seattle. э НэИ
请审查和评论
对不起,我不明白你的问题,你需要这样的东西? SELECT * FROM(select asciistr(convert(table_name,'UTF8'))AS str FROM table_ex) – Moudiz
“非UTF8投诉”是什么意思?如果你的数据库字符集是'AL32UTF8',那么**所有**字符都是UTF-8,否则Oracle会自动用''' –
替换它们。我没有要求你改变数据库的字符集。我问:“非UTF8投诉是什么意思?”如果您的数据库是“UTF8”(或“AL32UTF8”),则不能存储任何非UTF8字符。 –