在PLPGSQL / Orafce

问题描述

从Oracle转换后,我正在使用PL / pgsql和Orafce。在一个函数中,我正在写一个文件。我想用latin1编码编写。我的数据库在UTF8中。

convert函数,但我想我错过了一些事情,因为我似乎找不到用例。

convert('testé','UTF8','latin1') ==> in BYTEA test\351

问题在于此函数返回bytea。我如何获得text

解决方法

我认为您实际上需要使用convert_to函数将text从数据库编码转换为以不同编码编码的bytea

SELECT convert_to('testé','LATIN1');

  convert_to  
--------------
 \x74657374e9
(1 row)

您不能使结果成为text,因为该字节序列不是有效的UTF-8编码的字符串,并且PostgreSQL对这种数据损坏不容忍。

不幸的是,orafce似乎没有提供将二进制数据写入文件的功能,但是也许COPY可以帮助您:

COPY (SELECT textdata FROM texttable ORDER BY something)
   TO 'latin1file' (ENCODING 'LATIN1',FORMAT 'csv');

唯一的缺点是COPY会转义某些字符,例如",,因此您可能需要选择字符串中不出现的分隔符或分隔符。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...