gpt4 book ai didi

oracle - 使用 node-oracle 将硬编码字符串减半

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:04 24 4
gpt4 key购买 nike

我使用 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;

然后从 Node 调用它:

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.UTF8RUSSIAN_RUSSIA.AL32UTF8 结果相同)

我的配置:
Mac OS X 10.9
甲骨文客户端 11.2
Node 0.10.22
Node 甲骨文 0.3.4

最佳答案

  1. 似乎目前在 node-oracle 中不支持除 UTF8 之外的编码,因为 node.js dosn'不支持原生编码 ( proof )。

  2. 要正确处理字符串,您需要将客户端上的 NLS_LANG 参数设置为与数据库中相同的值 (CL8MSWIN1251)

因此,您可以从 2 个变体中进行选择:

A) Migrate databaseUTF8编码。

B) 补丁node-oracle source将字符串和 CLOB 转换为 UTF8,然后再将其内容返回到 node.js 并应用从 UTF8CL8MSWIN1251 的转换,然后再将其传递给 Oracle。 OCI interface有一个functions对于这样的转换。例如。为了您的本地目的,在 utils.h 中修补 OBJ_GET_STRING 宏就足够了。

附言node-oracle 目前看起来非常简单,所以要为许多意外做好准备(例如,不支持 BLOB 和集合,缺少连接设置等)。

关于oracle - 使用 node-oracle 将硬编码字符串减半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com