【发布时间】:2012-08-31 07:42:22
【问题描述】:
首先,我有一个数据库,不允许我更改任何内容,因此我必须处理给定的字符集。
这是数据库的字符集:
SELECT * from NLS_DATABASE_PARAMETERS
WHERE parameter IN ( 'NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET');
NLS_LANGUAGE GERMAN
NLS_TERRITORY GERMANY
NLS_CHARACTERSET WE8ISO8859P15
在连接到这个数据库时(使用 perl),我将连接字符集设置为 WE8ISO8859P15。我认为到目前为止我做得对。 :)
现在是棘手的部分,它失败了。数据库中的数据需要转换为 utf8,才能在我使用数据的浏览器中正确显示。
据我了解,设置 NLS_LANG 应该为我处理这个问题?设置它时,它应该将WE8ISO8859P15 数据(即时)转换为utf8,对吧?
所以,在 perl 中建立连接之前,我将环境变量设置为
$ENV{'NLS_LANG'} = ".AL32UTF8"
但没有任何改变,我做错了吗?
当手动转换数据时,在 perl 脚本中是这样的:
Encode::from_to($data, 'iso-8859-15', 'utf8');
它按预期工作。
非常感谢您的帮助。
谢谢, 安迪
【问题讨论】:
-
您要在数据库中存储哪些字符?您是否尝试将 ISO-8859-15 字符集中的无效字符存储在
CHAR、VARCHAR2或CLOB列中? -
它只是“普通”文本、数字和日期。所有存储的字符都是有效的 ISO-8859-15 字符。
-
您是使用 DBI 还是假脱机 SQLPlus 输出并读入 perl?请注意,SQLPlus 不支持 UTF8,因此无法使用。
-
我正在使用 DBI。顺便说一句,当我将连接直接设置为 utf8 时会发生什么?这是否可行,因为它没有。
标签: perl oracle utf-8 character-encoding