【发布时间】:2013-12-02 17:45:32
【问题描述】:
我使用 node-oracle 连接到 Oracle 数据库。
当我从带有西里尔数据的表中选择值时,一切都很好,但如果我这样调用程序:
CREATE OR REPLACE PROCEDURE TEST_ENCODING (CUR OUT SYS_REFCURSOR) AS
BEGIN
open cur for
select 'тест' as hello from dual; -- cyrillic hardcoded text
END TEST_ENCODING;
然后从节点调用它:
connection.execute("call TEST_ENCODING(:1)", [new oracle.OutParam(oracle.OCCICURSOR)],
function (err, result) {
console.log(result)
}
);
结果是:[ { HELLO: 'те' } ](字符串被切成两半)。
数据库配置如下:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET CL8MSWIN1251
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.3.0
在我的本地环境中:NLS_LANG=AMERICAN_AMERICA.UTF8
(也尝试了NLS_LANG=RUSSIAN_RUSSIA.UTF8 和RUSSIAN_RUSSIA.AL32UTF8,结果相同)
我的配置:
Mac OS X 10.9
Oracle 客户端 11.2
节点 0.10.22
节点预言机 0.3.4
【问题讨论】:
-
这个问题有很多可能的来源:不正确的字体选择、错误的 NLS_LANGUAGE 设置或 jdbc 驱动程序的问题。请查看this answer 和相关问题,让我们知道是否有任何解决方案适合您。
标签: oracle node.js node-oracle