首页 > 解决方案 > 在 oracle CLOB 流中写入 utf8 字符串会产生额外的空格 (node.js)

问题描述

我使用 node.js、oracle 和 oracledb 模块。我也有一个像这样的简单 PL/SQL 过程

    procedure mock_lobs(
        P_CLOB  IN OUT CLOB,
        P_BLOB  IN OUT BLOB
    )
    AS
    BEGIN
      NULL;
    END mock_lobs;

它准确地返回已经传递的内容。

然后我使用 API 创建一个临时 CLOB 对象clob = connection.createLob(oracledb.CLOB) ,并使用一些 unicode 字符串块(多次迭代)填充它,如下所示clob.write(chunk)

将 clob 传递给过程执行后,我收到生成的 CLOB 对象并尝试读取它。我看到我的块在每个块之后都写有额外的空格。当我写一个"abcЩ"长度为 4 个符号的字符串时,它被写成"abcЩ "(每个非 ASCII 符号的尾随空格)。换句话说,写入块的大小等于原始字符串占用的字节数。

我试图utf8像这样为 clob 指定编码:clob.setEncoding('utf8')即使在写作时clob.write(chunk, 'utf8'),但结果总是相同的。

问题解释是什么?我错过了什么?

标签: node.jsoraclenode-oracledb

解决方案


node-oracledb管理员确认这是一个错误。所以,我们将为下一个版本做好准备!


推荐阅读