PostgreSQL Oracle 兼容性之 - 字符编码转换 CONVERT

    xiaoxiao2026-03-30  9

    背景

    参考https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions027.htm

    Oracle 中,可以将一个字符串从一个编码转换为另一个编码的输出。

    convert(string, 目标字符集, 源字符集)

    例如

    SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL; CONVERT('ÄÊÍÕØABCDE' --------------------- A E I ? ? A B C D E ?

    PostgreSQL 字符集转换方法

    postgresql支持的转换函数如下

    List of functions Schema | Name | Result data type | Argument data types | Type ------------+--------------+------------------+---------------------+-------- pg_catalog | convert | bytea | bytea, name, name | normal pg_catalog | convert_from | text | bytea, name | normal pg_catalog | convert_to | bytea | text, name | normal (3 rows)

    PostgreSQL支持的转换映射关系如下

    postgres=# select * from pg_conversion ; conname | connamespace | conowner | conforencoding | contoencoding | conproc | condefault --------------------------------+--------------+----------+----------------+---------------+--------------------------------+------------ ascii_to_mic | 11 | 10 | 0 | 7 | ascii_to_mic | t mic_to_ascii | 11 | 10 | 7 | 0 | mic_to_ascii | t koi8_r_to_mic | 11 | 10 | 22 | 7 | koi8r_to_mic | t ... utf8_to_shift_jis_2004 | 11 | 10 | 6 | 41 | utf8_to_shift_jis_2004 | t euc_jis_2004_to_shift_jis_2004 | 11 | 10 | 5 | 41 | euc_jis_2004_to_shift_jis_2004 | t shift_jis_2004_to_euc_jis_2004 | 11 | 10 | 41 | 5 | shift_jis_2004_to_euc_jis_2004 | t (132 rows)

    使用convert_from, convert_to或者直接使用convert即可完成Oracle convert的功能。

    例如

    select convert('abc中国'::bytea, 'UTF8', 'GBK'); postgres=# select 'abc中国'::bytea; bytea ---------------------- \x616263e4b8ade59bbd (1 row) postgres=# select convert('abc中国'::bytea, 'UTF8', 'GBK'); convert ------------------ \x616263d6d0b9fa (1 row)

    Count

    相关资源:oracle迁移到PostgreSQL社区代码
    最新回复(0)