在 Oracle CLOB 流中写入 utf8 字符串会产生额外的空间 (node.js)

Writing utf8 strings in oracle CLOB stream gives additional spaces (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;

它 returns 正是传递的内容。

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

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

我试过像这样为 clob 指定 utf8 编码:clob.setEncoding('utf8') 甚至在编写 clob.write(chunk, 'utf8') 时,但结果始终相同。

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

node-oracledb 维护人员确认这是一个错误。所以,我们会为下一个版本做好准备!