使用 NLS_CHARACTERSET 为 WE8ISO8859P1 且 NLS_NCHAR_CHARACTERSET 为 AL16UTF16 且使用 ColdFusion 作为编程语言时出现 Oracle Unicode 问题

标签 oracle unicode coldfusion character-encoding oracle10g

我有 2 个 Oracle 10g 数据库,XE 和 Enterprise

XE

enter image description here

enter image description here

企业

enter image description here

enter image description here

这是我在测试表中使用的数据类型

enter image description here

enter image description here

然后我尝试测试从 http://www.sustainablegis.com/unicode/ 插入一些 Unicode 字符

结果是

XE

enter image description here

企业

enter image description here

对于此测试,我使用 ColdFusion 9 开发人员版本

<cfprocessingDirective pageencoding="utf-8"> 
<cfset setEncoding("form","utf-8")>

<form action="" method="post">
Unicode : <br>
<textarea name="txaUnicode" id="txaUnicode" cols="50" rows="10"></textarea>
<br><br>
Language : <br>
<input type="Text" name="txtLanguage" id="txtLanguage">
<br><br>
<input type="Submit">
</form>

<cfset dsn = "theDSN">

<cfif StructKeyExists(FORM, "FIELDNAMES")>
    <cfquery name="qryInsert" datasource="#dsn#">
        INSERT INTO UNICODE
        (
            C_VARCHAR2,
            C_CHAR,
            C_CLOB,
            C_NVARCHAR2,
            LANGUAGE
        )
        VALUES
        (
            <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FORM.TXAUNICODE#">,
            <cfqueryparam cfsqltype="CF_SQL_CHAR" value="#FORM.TXAUNICODE#">,
            <cfqueryparam cfsqltype="CF_SQL_LONGVARCHAR" value="#FORM.TXAUNICODE#">,
            <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FORM.TXAUNICODE#">,
            <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FORM.TXTLANGUAGE#">
        )
    </cfquery>
</cfif>

<cfquery name="qryUnicode" datasource="#dsn#">
    SELECT  *
    FROM    UNICODE
    ORDER BY    LANGUAGE
</cfquery>

<table border="1">
    <thead>
        <tr>
            <th>LANGUAGE</th>
            <th>C_VARCHAR2</th>
            <th>C_CHAR</th>
            <th>C_CLOB</th>
            <th>C_NVARCHAR2</th>
        </tr>
     </thead>
     <tbody>
        <cfoutput query="qryUnicode">
            <tr>
                <td>#qryUnicode.LANGUAGE#</td>
                <td>#qryUnicode.C_VARCHAR2#</td>
                <td>#qryUnicode.C_CHAR#</td>
                <td>#qryUnicode.C_CLOB#</td>
                <td>#qryUnicode.C_NVARCHAR2#</td>
            </tr>
        </cfoutput>
    </tbody>
</table>

来自本指南 http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10749/ch6unicode.htm#i1007297我认为对于我的企业数据库,它应该产生与 XE 相同的结果(至少对于 NVARCHAR2 列),因为该指南中的典型解决方案说:

  • 使用 NCHAR 和 NVARCHAR2 数据类型存储 Unicode 字符
  • 保留 WE8ISO8859P1 作为数据库字符集
  • 使用 AL16UTF16 作为国家字符集

那么,如何使其在我的企业数据库中也能正常工作?

谢谢 :)

最佳答案

第一个数据库以 utf-8 编码存储值,第二个数据库以 iso-8859-1 编码存储值(除了 N 数据类型),但是您正在以 utf-8 写出这两个值,因此第一个数据库没问题,但第二个数据库解码错误.

关于使用 NLS_CHARACTERSET 为 WE8ISO8859P1 且 NLS_NCHAR_CHARACTERSET 为 AL16UTF16 且使用 ColdFusion 作为编程语言时出现 Oracle Unicode 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5086773/

相关文章:

sql - 甲骨文/SQL : wm_concat & order by

iis - 无法让 IIS 7/Coldfusion 提供 404

coldfusion - 使用 CGI.HTTP_USER_AGENT 将图像显示限制在移动设备上

authentication - 如何为运行在同一台服务器上的不同 ColdFusion 应用程序实现单点登录?

node.js - Node OracleDB 连接在远程服务器中不起作用

c - 使用 C 和嵌入式 SQL 在 Oracle 中选择 CLOB

c# - 使用引用游标作为 ODP.NET 的输入类型

c - SHELLEXECUTEINFO UNICODE 支持吗?

c# - 通过等效的简化字母数字字符转换非 ascii 多文化字符

Java:Windows 上的 Runtime.exec() 和 Unicode 符号:如何使其能够处理非英文字母?