PostgreSQL Oracle 兼容性之 - 字符编码转换 CONVERT
背景
参考
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)