如何在oracle表中存储?

时间:2015-01-30 22:26:57

标签: oracle character-encoding special-characters

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

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

请问。

1 个答案:

答案 0 :(得分:2)

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

执行此查询以进行检查。

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命令。为此,您必须根据NLS_LANG

的代码页设置cmd环境变量
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。您还可以更改当前的代码页,例如UTF-8的chcp 65001

解决方案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值为resp。您的系统环境变量与编辑器的文件保存选项匹配。

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