从 Oracle 转换后,我正在使用 PL/pgSQL 和 Orafce。在一个函数中,我正在写一个文件。我想用 LATIN1 编码来写。我的数据库是 UTF8 格式的。
有convert
功能,但我想我错过了一些东西,因为我似乎没有找到我的用例。
convert('testé', 'UTF8', 'LATIN1') ==> in BYTEA test\351
问题是这个函数返回bytea
. 我怎么能得到一个text
?
从 Oracle 转换后,我正在使用 PL/pgSQL 和 Orafce。在一个函数中,我正在写一个文件。我想用 LATIN1 编码来写。我的数据库是 UTF8 格式的。
有convert
功能,但我想我错过了一些东西,因为我似乎没有找到我的用例。
convert('testé', 'UTF8', 'LATIN1') ==> in BYTEA test\351
问题是这个函数返回bytea
. 我怎么能得到一个text
?
我认为您实际上需要convert_to
将 atext
从数据库编码转换为bytea
以不同编码编码的函数:
SELECT convert_to('testé', 'LATIN1');
convert_to
--------------
\x74657374e9
(1 row)
您不能将结果设为 a text
,因为该字节序列不是有效的 UTF-8 编码字符串,并且 PostgreSQL 对这种数据损坏是不可原谅的。
不幸的是 orafce 似乎没有提供将二进制数据写入文件的功能,但也许COPY
可以帮助您:
COPY (SELECT textdata FROM texttable ORDER BY something)
TO 'latin1file' (ENCODING 'LATIN1', FORMAT 'csv');
唯一的缺点是会COPY
转义某些字符,例如"
and ,
,因此您可能需要选择未出现在字符串中的分隔符或定界符。