在 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
维护人员确认这是一个错误。所以,我们会为下一个版本做好准备!
我使用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
维护人员确认这是一个错误。所以,我们会为下一个版本做好准备!