一、
个人实践:加了一个环境变量NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
成功了
方法:
设置好环境变量后,在 PLSQL Developer 的目录中创建start.bat文件。
以下是start.bat的内容:
@echo off
set path=D:\oracle\product\instantclient_10_2
set ORACLE_HOME=D:\oracle\product\instantclient_10_2
set TNS_ADMIN=D:\oracle\product\instantclient_10_2
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
start plsqldev.exe
启动plsql时直接点击这个脚本
TNS_ADMIN=D:\oracle\product\instantclient_10_2 这环境变量如果没有的话,在我的电脑,属性,高级,环境变量,中添加(我用的是oracle精简版客户端)
如果是非精简版的建议修改注册表:运行-》regedit->HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient10g_home1/NSL_LANG,倒数第二个参数可能不一样,改成
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
这个可能是oracle客户端和服务器端的编码方式不一样。
SQL> select * from v$nls_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE
NLS_CHARACTERSET
ZHS16GBK
--数据库服务器字符集
SQL> select * from nls_database_parameters;
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
--客户端字符集
--表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
SQL> select * from nls_instance_parameters;
PARAMETER
------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
--会话字符集的设置,这个没有特殊设置的话,和nls_instance_parameters一致;
SQL> select * from nls_session_parameters;
PARAMETER
------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE
二、
如果数据库服务器端的编码和客户端字符集编码不一样,则会导致乱码,因此需要更改客户端的编码方式。
更改客户端的编码方式有两种方式,第一种是更改注册表,这个比较危险,就不在这里提及。第二种是设置环境变量。
设置环境变量,新建一个环境变量:NLS_LANG,值是:AMERICAN.ZHS16GBK。
值的构成方式是数据库中查询的服务器端的“NLS_LANGUAGE的值”+“.”+“NLS_CHARACTERSET的值”
如果是其他的客户端,如putty和ssh client,xmanager等的话也是要设置环境变量
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
这个环境变量只会改变nsl_session_parameters的值,不会改变nls_data_parameters和nls_instance_parameters的参数值
eg:
SQL> select name from menu;
NAME
--------------------
意义
北京