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

Rol*_*and 9 oracle coldfusion plsql character-encoding coldfusion-9

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

我对MS Word左引号(以UTF-8编码)发生的事情特别感兴趣E28098.当我i_value在PL/SQL中解码时,它变为18(十六进制).考虑到它是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>
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 0

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

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

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