我使用DBIx::Class
从Oracle(11.2)获取数据。获取数据时,例如"Alfred Kärcher"
,它将值返回为"Alfred Karcher"
。我试图添加$ ENV NLS_LANG和NLS_NCHAR但仍然没有变化。
我还使用utf8
模块来验证数据是否为utf8编码。
答案 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个字节的信息。