perl DBIx :: Class使用umlaut转换值

时间:2014-07-02 15:14:31

标签: oracle perl dbix-class

我使用DBIx::Class从Oracle(11.2)获取数据。获取数据时,例如"Alfred Kärcher",它将值返回为"Alfred Karcher"。我试图添加$ ENV NLS_LANG和NLS_NCHAR但仍然没有变化。

我还使用utf8模块来验证数据是否为utf8编码。

2 个答案:

答案 0 :(得分:0)

这看起来像转换数据的Oracle客户端库。

确保数据库编码设置为AL32UTF8,环境变量NLS_LANG设置为AMERICAN_AMERICA.AL32UTF8

也可以通过设置ora_(n)charset参数来实现。

DavidEG的两个链接包含使其运行所需的所有信息。

您的脚本中不需要use utf8;,但请确保将STDOUT设置为UTF-8编码:use encoding 'utf8';

答案 1 :(得分:0)

这里的问题在于您为存储

指定的列数据类型

你的列数据库指定为VARCHAR2(10),然后对于oracle,实际存储10个字节,对于英文10个字节表示10个字符,但是如果插入到列中的数据包含一些特殊字符,如umlaut,则需要2个字节。然后你最终得到RA-12899:VALUE太大了。 因此,如果您插入到用户和来自不同国家/地区的列中的数据,则使用VARCHAR2(10个字符)

以字节为单位:VARCHAR2(10字节)。这将支持最多10个字节的数据,在多字节字符集中可能只有两个字符。

字符:VARCHAR2(10个字符)。这将支持最多10个字符的数据,这可能多达40个字节的信息。