【问题标题】:How to store ® in oracle table?如何在oracle表中存储®?
【发布时间】:2015-01-30 22:26:57
【问题描述】:

我需要向 Oracle 表中插入值 'RR® 5'?

我创建了一个表列varchar2 数据类型。 但是当我显示它显示的数据时: 'RR?? 5'

任何想法,请。

【问题讨论】:

标签: oracle character-encoding special-characters


【解决方案1】:

首先你必须检查你的数据库是否在支持你的特殊字符的字符编码上运行。

执行此查询进行检查。

SELECT * 
FROM V$NLS_PARAMETERS 
WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

AL32UTF8UTF8WE8ISO8859P1 等字符集能够存储特殊字符 ®。 为了检查您的字符是否受支持,您可以运行此命令

SELECT 
    ASCIISTR(CAST(UNISTR('\00C2') AS VARCHAR2(4))) AS VARCHAR_SUPPORT, 
    ASCIISTR(CAST(UNISTR('\00C2') AS NVARCHAR2(4))) AS NVARCHAR_SUPPORT
FROM dual;


VARCHAR_SUPPORT   NVARCHAR_SUPPORT                        
----------------  ------------------------
\00C2             \00C2                                   

1 row selected.

如果您的结果值 (00C2) 等于您的输入值,则支持您的字符。

假设你的数据库支持角色(否则游戏到此结束)

解决方案 1

从任何 SQL 编辑器或 SQL*plus 运行此命令

INSERT INTO THE_TABLE VALUES (UNISTR('RR\00C2\00AE 5'));

根据您的实际要求,这可能是一项非常繁琐的工作。

解决方案 2

使用 SQL*plus 命令。为此,您必须根据cmd 的代码页设置NLS_LANG 环境变量

C:\>chcp
Active code page: 850

C:\>set NLS_LANG=.WE8PC850

C:\>sqlplus user/pwd@DB

SQL> INSERT INTO THE_TABLE VALUES ('®');

当您在 Linux/Unix 上工作时,chcp 等效于 locale charmapecho $LANG。您还可以更改当前代码页,例如chcp 65001 用于 UTF-8

解决方案 3a

创建一个包含与上述相同的 INSERT 命令的 SQL 脚本,并使用本地编码(通常为 Windows CP1252,很多时候误命名为 ANSI)保存它

c:\>set NLS_LANG=.WE8MSWIN1252

c:\>sqlplus user/pwd@DB @Special_Char_CP1252.sql

解决方案 3b

创建一个 SQL 脚本并使用大多数现代编辑器支持的 UTF-8 保存它。注意:SQL 脚本不得包含 BOM(字节顺序标记),否则 SQL*plus 将引发错误。我发现这个微型命令行工具可以从任意文本文件中添加和删除 BOM:UTF BOM Utils

c:\>set NLS_LANG=.AL32UTF8

c:\>sqlplus user/pwd@DB @Special_Char_UTF8.sql

上述解决方案的注意事项:您可以跳过set NLS_LANG 命令,以防您的注册表进行了相应设置。用这个命令检查

C:\>REM for x64 Oracle Client

c:\>reg query HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ /s /v NLS_LANG

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1
    NLS_LANG    REG_SZ    AMERICAN_SWITZERLAND.AL32UTF8

End of search: 1 match(es) found.    

C:\>REM for x86 Oracle Client

c:\>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\ /s /v NLS_LANG

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1
    NLS_LANG    REG_SZ    AMERICAN_SWITZERLAND.AL32UTF8

End of search: 1 match(es) found.

C:\>

解决方案 4

从更复杂的编辑器(如 TOAD 或 SQL Developer)运行您的 INSERT 语句。确保注册表中的 NLS_LANG 值,分别。您的系统环境变量与编辑器的文件保存选项匹配。

一些可能对您有所帮助的外部资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2019-01-17
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多