我用的是甲骨文12G
当我从sql plus运行@F:\update.sql时,当我从sqlplus或sql developer检索时,它将重音字符é显示为垃圾字符。
从sql +运行单个语句时。现在,如果我从sqlplus检索它,它将显示正确的字符,但是当我从sqldeveloper检索它时,它再次显示垃圾字符。
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]"发布于 2016-11-22 13:00:22
我不熟悉,但我可以给出SQL*Plus的解决方案。
假设您喜欢在Windows CP1252中工作
首先,确保将文件F:\update.sql保存为CP1252编码。许多编辑器称这种编码为ANSI,这是相同的(让我们跳过术语ANSI和Windows-1252之间区别的细节)
然后在运行脚本之前输入
chcp 1252
以便将cmd.exe的编码切换到CP1252。默认情况下,cmd.exe的编码很可能是CP850或CP437,它们是不同的。
然后将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/password@db @F:\update.sql注意:为了永久设置cmd.exe的编码,请参见以下答案:Windows命令行中的Unicode字符-如何?
NLS_LANG可以设置为环境变量,也可以在HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG (针对32位Oracle )的注册表中设置,resp。HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG (用于64位Oracle客户端)。
对于检查选项,应该可以在某个地方定义SQL文件的编码。
您不会被迫使用Windows1252。其他编码也是如此,例如WE8ISO8859P1 (即ISO8859-1,chcp 28591)或UTF-8.但是,在UTF-8的情况下,script可能包含数据库字符集WE8MSWIN1252不支持的字符。这样的字符将被占位符(例如¿)所取代。
https://stackoverflow.com/questions/40741787
复制相似问题