我在這裏修改我的問題。我正在使用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字符。 –