2016-11-22 42 views
3

我使用的是Oracle 12G更新/插入/检索数据库中的重音字符?

当我运行从SQL @F:\update.sql再加上它显示重音字符é为垃圾字符当我取回无论是从sqlplus中或SQL开发

通过运行时从SQL独立的语句加。现在,如果从sqlplus检索它,它显示正确的字符,但是当我从sqldeveloper retieve它再次 显示垃圾字符。

update.sql内容是这样的

update employee set name ='é' where id= 1; 

我想要的是当我运行@ F:\ update.sql,应该插入/更新/正确的格式检索它无论是从SQLPLUS或任何其他工具?

有关信息: - 当我运行

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%' 

我得到以下信息

PARAMETER      VALUE 
------------------------------ ---------------------------------------- 
NLS_CHARACTERSET    WE8MSWIN1252 
NLS_NCHAR_CHARACTERSET   AL16UTF16 

,当我从命令提示符下运行@.[%NLS_LANG%]我看到

SP2-0310: unable to open file ".[AMERICAN_AMERICA.WE8MSWIN1252]" 

回答

2

我不熟悉SQL Developer,但我可以为SQL * Plus提供解决方案。

想你想在Windows工作CP1252

首先确保该文件F:\update.sql保存在CP1252编码。许多编辑把这个编码ANSI这是相同的(让我们跳过项ANSIWindows-1252约区别的细节),以切换的编码

然后运行该脚本之前输入

chcp 1252

cmd.exe到CP1252。默认编码cmd.exe最有可能是CP850CP437这是不同的。

然后将NLS_LANG环境变量设置为字符集WE8MSWIN1252,例如,

set NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

你的脚本能很好地工作的SQL * Plus之后。 SQL * Plus从父项cmd.exe继承编码(或“字符集”,如果您更喜欢这个词)。 NLS_LANG告诉Oracle驱动程序正在使用哪个字符集。

实例总结:

chcp 1252 
set NLS_LANG=.WE8MSWIN1252 
sqlplus username/[email protected] @F:\update.sql 

一些注意事项:为了设置的cmd.exe编码永久,看到这样的回答:Unicode characters in Windows command line - how?

NLS_LANG可以设置无论是作为环境变量或在注册处HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG(为32位Oracle客户端),分别。 HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG(用于64位Oracle客户端)。

对于SQL Developer检查你的选项,在某个地方应该可以定义SQL文件的编码。

你不是被迫使用Windows-1252。其他编码也是如此,例如WE8ISO8859P1(即ISO-8859-1,chcp 28591)或UTF-8。但是,对于UTF-8,您的SQL脚本可能包含数据库字符集WE8MSWIN1252不支持的字符。这些字符将被占位符替换(例如¿)。

+0

它不起作用。我做的是1)打开CMD 2)运行输出'活动代码页:1252'的'chcp 1252' 3)然后我运行'@F:\ update.sql' 4)我检索更新的数据,它再次给我垃圾代码 – user3198603

+0

我试过'设置NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252'但它没有任何区别? – user3198603

+0

是的,我100%确定它保存为ANSI.Will能够在你的最后尝试它? – user3198603

相关问题