调用 Oracle PL/SQL 过程时使用什么编码

What encoding is used when calling an Oracle PL/SQL procedure

在我的 coldfusion 页面上,我调用了一个 PL/SQL 过程。 HTML 形式使用 UTF-8 编码,oracle DB 具有编码 WE8ISO8859P1。那么下面的i_value会发生什么样的转换呢?

我对 MS Word 左引号(以 UTF-8 编码为 E28098)发生了什么特别感兴趣。当我在 PL/SQL 中解码 i_value 时,它变成了 18(Hex)。考虑到它是 U+2018 这有一定道理,但我仍然想知道为什么 20 被吞掉了。

<CFSTOREDPROC PROCEDURE = "my_schema.lib.write_field" datasource="#datasource#">
        <cfprocparam cfsqltype="CF_SQL_VARCHAR" variable="i_name"   value="remark"  type="In">
        <cfprocparam cfsqltype="CF_SQL_VARCHAR" variable="i_value" value="#Form.remark#" type="In">
</CFSTOREDPROC>

ColdFusion 基于 Java,所以我猜字符串变量是使用 UTF-16 编码的。

当从 UTF-16(2 字节编码)到 1 字节编码(例如 WE8ISO8859P1)时,就像我的示例中的情况一样,忽略 MSB,只考虑 LSB。

这可以解释观察到的行为: 我注意到有些字节在发送到数据库时似乎被吞没了,例如left single quotation mark(UTF-16 中的 0x2018)在数据库中变为 0x18。