- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用 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.UTF8
和 RUSSIAN_RUSSIA.AL32UTF8
结果相同)
我的配置:
Mac OS X 10.9
甲骨文客户端 11.2
Node 0.10.22
Node 甲骨文 0.3.4
最佳答案
似乎目前在 node-oracle
中不支持除 UTF8
之外的编码,因为 node.js
dosn'不支持原生编码 ( proof )。
要正确处理字符串,您需要将客户端上的 NLS_LANG 参数设置为与数据库中相同的值 (CL8MSWIN1251)
因此,您可以从 2 个变体中进行选择:
A) Migrate database为UTF8
编码。
B) 补丁node-oracle
source将字符串和 CLOB 转换为 UTF8
,然后再将其内容返回到 node.js 并应用从 UTF8
到 CL8MSWIN1251
的转换,然后再将其传递给 Oracle。 OCI interface有一个functions对于这样的转换。例如。为了您的本地目的,在 utils.h
中修补 OBJ_GET_STRING
宏就足够了。
附言node-oracle
目前看起来非常简单,所以要为许多意外做好准备(例如,不支持 BLOB 和集合,缺少连接设置等)。
关于oracle - 使用 node-oracle 将硬编码字符串减半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067044/
我有这个图: require(corrplot) par(oma=c(0,0,2,0), mfrow = c(1, 3)) for (country in c("Italy","Germany","A
我是 Swift 编程的新手,我正在尝试通过一些 Youtube 教程学习如何构建我自己的聊天应用程序。我已经走了很远,但遇到了障碍。我不明白为什么当我尝试在 SwiftUI 中向上滚动此 View
我有一个大容器,里面有两个 div,我想用垂直线分隔这些内部 div,我把我试过的东西贴了下来,在另一个例子中,CSS 代码工作正常,但在这种情况下不工作。HTML Inf
我正在为 Java 中的每个循环做很多工作。我正在使用它们让我的对象的每个类都进行“绘图”,但它需要大量内存所以我想将它减半,有没有办法为每个循环做而不是为完整列表做? for(Tile tile:
我正在尝试读取带有电子邮件地址的 cookie。我知道,cookie 已正确保存并包含完整的电子邮件地址(例如“mymail@test.com”)。但是,当我查看请求对象中的 cookie 时,它
我想在特定窗口宽度(移动)下将 div 容器的左边距减半。 我已经尝试使用 parseInt、.css 并将其临时存储在一个变量中。然后将其切成两半并使用 .replace。 if ($(window
我正在训练神经网络并得到以下输出。 loss 和 val_loss 都在减少,这让我很高兴。然而,val_acc 保持不变。这能有什么原因呢?我的数据非常不平衡,但我通过 sklearn comput
我是一名优秀的程序员,十分优秀!