查看 nls_lang sqlplus

时间:2024-03-06 17:35:22

[1]

http://www.google.com.hk/search?hl=en&safe=active&q=sqlplus+%E6%9F%A5%E7%9C%8B+oracle+%E7%BC%96%E7%A0%81++%E8%A7%86%E5%9B%BE&aq=f&aqi=&aql=&oq=

[2]

http://fengyehongyu.blog.163.com/blog/static/34400245201111044552299/

如何查看及修改oracle编码格式方法

技术文章 2011-02-10 16:45:52 阅读46 评论0
字号:大中小
订阅


1、进入cmd 输入sqlplus sys/abc123 as sysdba 或者着 sqlplus system/abc123 as sysdba sys和system的区别 sys是最大权限的用户,是数 据库集群里面的最高管理员。 system是单个oracle实例的最高管理员

2、 --查看oracle数据库字符集:

  select userenv(\'language\') from dual;

  查询结果:

  SIMPLIFIED CHINESE_CHINA.AL32UTF8

  --修改oracle数据库字符集:(在SQL Plus中)

  sql> conn / as sysdba;

  sql> shutdown immediate;

  database closed.

  database dismounted.

  oracle instance shut down.

  sql> startup mount;

  oracle instance started.

  total system global area 135337420 bytes

  fixed size 452044 bytes

  variable size 109051904 bytes

  database buffers 25165824 bytes

  redo buffers 667648 bytes

  database mounted.

  sql> alter system enable restricted session;

  system altered.

  sql> alter system set job_queue_processes=0;

  system altered.

  sql> alter system set aq_tm_processes=0;

  system altered.

  sql> alter database open;

  database altered.

  sql> alter database character set internal_use JA16SJIS;

  sql> shutdown immediate;

  sql> startup;

[3]

http://blog.csdn.net/crazylaa/archive/2009/12/19/5035971.aspx

查看Oracle字符集及怎样修改字符集(zt) 收藏

一、什么是oracle字符集   

Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地 化语言和平台。   

影响oracle数据库字符集最重要的参数是NLS_LANG参数。

它的格式如下:   NLS_LANG = language_territory.charset   

它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。

其中:   

Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK   

从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

二.查看数据库字符集

这涉及三方面的字符集,

一是oracel server端的字符集;

二是oracle client端的字符集;

三是dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。  

 1、查询oracle server端的字符集   

有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:

SQL>select userenv(‘language’) from dual;   

结果类似如下:AMERICAN _ AMERICA. ZHS16GBK   

2、如何查询dmp文件的字符集   

用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有 几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:   

SQL> select nls_charset_name(to_number(\'0354\',\'xxxx\')) from dual;   

ZHS16GBK   

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):   

cat exp.dmp |od -x|head -1|awk \'{print $2 $3}\'|cut -c 3-6   

然后用上述SQL也可以得到它对应的字符集。

3、查询oracle client端的字符集   

这个比较简单。

在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,比如:   set nls_lang=AMERICAN_AMERICA.ZHS16GBK   

这样就只影响这个窗口里面的环境变量。   

在unix平台下,就是环境变量NLS_LANG。   

$echo $NLS_LANG   

AMERICAN_AMERICA.ZHS16GBK   

如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。

补充:

(1).数据库服务器字符集

select * from nls_database_parameters

来源于props$,是表示数据库的字符集。

(2).客户端字符集环境

select * from nls_instance_parameters

其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

(3).会话字符集环境

select * from nls_session_parameters

来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

三、修改oracle的字符集   

上文说过,oracle的字符集有互相的包容关系。如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数 据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。   

一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符 集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库 server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集 的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBK和 ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。   

1、修改server端字符集(不建议使用)  

 在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

$sqlplus /nolog   

SQL>conn / as sysdba;   若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:  

SQL>STARTUP MOUNT;   

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;   

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;   

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;   

SQL>ALTER DATABASE OPEN;   

SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;   

SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;   

SQL>SHUTDOWN IMMEDIATE;   

SQL>STARTUP

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start) 按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息

要解决这个问题有两种方法

一个是,利用INTERNAL_USE 关键字修改区域设置,

还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT EXCLUSIVE;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;

SQL>SHUTDOWN immediate;

SQL>startup;

如果按上面的做法做,National charset的区域设置就没有问题

2、修改dmp文件字符集   

上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论 上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如 US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。   

具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。

比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:   SQL> select to_char(nls_charset_id(\'ZHS16GBK\'), \'xxxx\') from dual;   

0354   

然后将dmp文件的2、3字节修改为0354即可。   

如果dmp文件很大,用ue无法打开,就需要用程序的方法了。

-----------------------------------------------------------------------------------------------------------------------------------

数据库服务器字符集更改步骤

  问题描述:

  在客户端插入字符“咪咪”,从数据库中查询显示时出现乱码

  处理步骤:

  10.1 对数据库做全库导出,备份全库数据,以防故障发生

  首先设定客户端的字符集,必须以ZHS16GBK的字符集导出,然后才能在更改失败后顺利倒入新建的库。

  #setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK";

  #stty -istrip -parity cs8;

  #setenv LANG zh

  拟在/sybdata(磁盘阵列)下建立一个目录orabak,用于存放dmp文件。

  #mkdir /sybdata/orabak

  #chown oracle:oinstall /sybdata/orabak

  #su – oracle

  #cd /sybdata/orabak

  %exp system/manager@hnsdh file=hnsdh_2005-8-17 log=hnsdh_exp_2005-8-17 full=y

  (此处命名为示例,以实施当日日期为准)

  察看日志结尾,以判定导出是否成功。

  #cat hnsdh_2005-8-17.dmp | od -x | head

  看第二和第三个字节组成的十六进制数是多少可判断导出文件的字符集。

  示例如下


  #cat example.dmp | od -x | head
  0000000 0303 5445 5850 4f52 543a 5630 392e 3032
  。。。
  0000220 646d 7000 0000 0000 0000 0000 0000 0000
  十六进制的0354化为十进制为852,参造下表
  NLS_CHARSET_ID NLS_CHARSET_NAME HEX_ID
  -------------- ------------------------------ -------------
  1 US7ASCII 1
  2 WE8DEC 2
  3 WE8HP 3
  4 US8PC437 4
  5 WE8EBCDIC37 5
  6 WE8EBCDIC500 6
  7 WE8EBCDIC1140 7
  8 WE8EBCDIC285 8
  ...................
  850 ZHS16CGB231280 352
  851 ZHS16MACCGB231280 353
  852 ZHS16GBK 354
  853 ZHS16DBCS 355
  860 ZHT32EUC 35c
  861 ZHT32SOPS 35d
  862 ZHT16DBT 35e
  863 ZHT32TRIS 35f
  864 ZHT16DBCS 360
  865 ZHT16BIG5 361
  866 ZHT16CCDC 362
  867 ZHT16MSWIN950 363
  868 ZHT16HKSCS 364
  870 AL24UTFFSS 366
  871 UTF8 367
  872 UTFE 368


  即可得出这个dmp文件的字符集为ZHS16GBK。

  10.2 在数据库中直接更改字符集参数

  操作步骤如下:


  SQL> shutdown immediate
  SQL> startup mount
  SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
  SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  SQL> ALTER DATABASE OPEN;
  SQL> alter session set events \'10046 trace name context forever,level 12\';
  SQL> alter database character set INTERNAL_USE ZHS16GBK;
  SQL> shutdown immediate
  SQL> startup


  察看系统字符集

  SQL> SELECT * FROM NLS_DATABASE_PARAMETERS;

  看NLS_CHARACTERSET的值为多少,如果为ZHS16GBK则说明改动成功。

  如果执行正常,则按照下一节进行测试操作。

  10.3 更改成功后的测试

  测试1,在数据库服务器端下测试

  %setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK";
  %stty -istrip -parity cs8;
  %setenv LANG zh
  %sqlplus /nolog
  SQL〉conn / as sysdba
  SQL〉create table test_tq (a char(20));
  SQL〉insert into test_tq
  1>(a)
  2>values (\'洣洣\');
  SQL〉select * from test_tq;


  如显示为

  A

  --------------------

  洣洣

  则成功。

  测试2,Windows客户端环境下测试
  运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE, 第三步选择 ORACLE, 第四步选择 NLS_LANG, 键 入 与服 务 器 端 相 同 的 字 符 集(本例为:AMERICAN_AMERICAN.US7ASCII)。

  右击我的电脑,然后点击属性,“高级”页面下,点击“环境变量”,在系统变量中添加:

  变量名:NLS_LANG

  变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  运行cmd,输入echo %NLS_LANG%,查看系统变量设置时否成功

  然后运行:


  $sqlplus system/manager@hnsdh
  SQL〉conn / as sysdba
  SQL〉create table test_tq (a char(20));
  SQL〉insert into test_tq
  1>(a)
  2>values (\'洣洣\');
  SQL〉select * from test_tq;


  如显示为

  A

  --------------------

  洣洣

  则成功。

  10.4 更改不成功时的措施

  新建数据库,设定字符集为ZHS16GBK,其他参数先照搬原来的,并倒入数据。建库时所需的具体参数在重建之前要搜集。注意在配置控制文件时设定最大数据文件数。

  建好数据库以后,执行以下命令即可恢复数据库

  %cd /sybdata/orabak

  %imp system/manager@hnsdh full=y ignore=y file=hnsdh_2005-8-17 log=hnsdh_imp_2005 -8-17

[4]

http://topic.csdn.net/t/20010801/14/218740.html

原来是两台数据库服务器的nls_lang不一样! 

[5]

http://yang8787jie-126-com.iteye.com/blog/671390

2010-05-21
查看Oracle字符集及如何修改字符集(转)
文章分类:数据库
一、什么是oracle字符集

Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响oracle数据库字符集最重要的参数是NLS_LANG参数。

它的格式如下:   NLS_LANG = language_territory.charset

它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。

其中:

Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK

从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

二.查看数据库字符集

这涉及三方面的字符集,

一是oracel server端的字符集;

二是oracle client端的字符集;

三是dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

1、查询oracle server端的字符集

有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:

SQL>select userenv(‘language’) from dual;

结果类似如下:AMERICAN _ AMERICA. ZHS16GBK

2、如何查询dmp文件的字符集

用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:

SQL> select nls_charset_name(to_number(\'0354\',\'xxxx\')) from dual;

ZHS16GBK

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

cat exp.dmp |od -x|head -1|awk \'{print $2 $3}\'|cut -c 3-6

然后用上述SQL也可以得到它对应的字符集。

3、查询oracle client端的字符集

这个比较简单。

在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,比如:   set nls_lang=AMERICAN_AMERICA.ZHS16GBK

这样就只影响这个窗口里面的环境变量。

在unix平台下,就是环境变量NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。

补充:

(1).数据库服务器字符集

select * from nls_database_parameters

来源于props$,是表示数据库的字符集。

(2).客户端字符集环境

select * from nls_instance_parameters

其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

(3).会话字符集环境

select * from nls_session_parameters

来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

三、修改oracle的字符集

上文说过,oracle的字符集有互相的包容关系。如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。

一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。

1、修改server端字符集(不建议使用)

在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

$sqlplus /nolog

SQL>conn / as sysdba;   若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

SQL>STARTUP MOUNT;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;

SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start) 按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息

要解决这个问题有两种方法

一个是,利用INTERNAL_USE 关键字修改区域设置,

还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT EXCLUSIVE;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;

SQL>SHUTDOWN immediate;

SQL>startup;

如果按上面的做法做,National charset的区域设置就没有问题

2、修改dmp文件字符集

上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。

具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。

比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:   SQL> select to_char(nls_charset_id(\'ZHS16GBK\'), \'xxxx\') from dual;

0354

然后将dmp文件的2、3字节修改为0354即可。

如果dmp文件很大,用ue无法打开,就需要用程序的方法了

[6]

http://www.google.com.hk/search?q=%E6%9F%A5%E7%9C%8B+nls_lang+sqlplus&hl=en&safe=active&prmd=ivns&ei=AfmnTen5NIyOvQPE3JyGCg&start=10&sa=N

[7]

http://hi.baidu.com/dearhwj/blog/item/2cb858257ba30c6834a80f86.html

解决oracle客户端乱码——SQLPLUS乱码解决
2009-04-02 21:06要解决Oracle的客户端乱码问题关键是要把服务器端使用的字符集跟客户端使用的字符集统一起来。Oracle客户端(Sqlplus)通过NLS_LANG环境变量来确定客户端使用的字符集。NLS_LANG参数由以下部分组成:
NLS_LANG=<Language>_<Territory>.<Clients Characterset>

NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页
或者对于unicode应用设置为UTF8

在Windows上查看当前系统的代码页可以使用chcp命令:
E:\>chcp
活动的代码页: 936

代码页936也就是中文字符集 GBK,在Microsoft的官方站点上,我们可以遭到关于936代码页的具体编码规则,请参考以下链接:
http://www.microsoft.com/globaldev/reference/dbcs/936.htm

2. 查看 NLS_LANG 的方法
Windows使用:

echo %NLS_LANG%
如:
E:\>echo %NLS_LANG%
AMERICAN_AMERICA.ZHS16GBK

Unix使用:

env|grep NLS_LANG
如:
/opt/oracle>env|grep NLS_LANG
NLS_LANG=AMERICAN_CHINA.ZHS16GBK

PLSQL Developer之类Windows客户端设置,可以在注册表中更改NLS_LANG,具体键值位于:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\
xx指存在多个ORACLE_HOME时系统编号。


3. 查看数据库当前字符集参数设置
SELECT * FROM v$nls_parameters;

select * from nls_database_parameters

select userenv(‘language’) from dual;

4. 查看数据库可用字符集参数设置
SELECT * FROM v$nls_valid_values;


5. 客户端 NLS_LANG 的设置方法
Windows:
# 常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
# 常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
可以通过修改注册表键值永久设置
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG

Unix:
# 常用unicode字符集
export NLS_LANG=american_america.AL32UTF8
# 常用中文字符集
export NLS_LANG="Simplified Chinese_china".ZHS16GBK
可以编辑 bash_profile 文件进行永久设置
vi .bash_profile
NLS_LANG="Simplified Chinese_china".ZHS16GBK export NLS_LANG
# 使 bash_profile 设置生效
source .bash_profile