Oracle客户端NLS_LANG的设置
1、操作系统本⾝有字符集  ---locale -a或者chcp
2、oracle数据库软件有字符集
3、oracle软件的操作系统本⾝也有字符集
AL32UTF8
【AL】⽀持所有语⾔(All Language)
【32】每字符最多占⽤32位(4字节)
【UTF8】编码为UTF-8
WE8MSWIN1252
【WE】⽀持西欧语⾔(Western Europe)
【8】每字符需要占⽤8位(单字节)
【MSWIN1252】编码为CP1252
US7ASCII
【US】表⽰美国(United States)
【7】每字符需要占⽤7位
【ASCII】编码为ASCII
字符集说⽩了是⼀个集合,是⼀张表,这个表有两列,左⾯这列是字符是所有要存储的字符。
字符有很多字符,⽐如我们讲中⽂字符:
左⾯这列就是中国⼈常⽤的所有的中⽂字符,有汉字、英⽂字母有数字还有⼀些特殊的符号,在左⾯都出现是我们中⽂要使⽤的所有的字符
linux安装oracle客户端详细步骤右边是⼀个编码,从1号2、3、4、5、6 ,将来提到1的时候就对应着⼀个字符
所以说字符集就是字符和编码的这么⼀个对应表
常⽤字符集:
US7ASCII
ZHS16CGB231280
AL32UTF8
AF16UTF16
ZHS16GBK
数据库字符集
SQL> select * from nls_database_parameters;
PARAMETER          VALUE
------------------------------------------------------------ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE          AMERICAN
NLS_TERRITORY          AMERICA
NLS_CURRENCY          $
NLS_ISO_CURRENCY          AMERICA
NLS_NUMERIC_CHARACTERS          .,
NLS_CHARACTERSET          AL32UTF8            -------------数据库字符集
NLS_CALENDAR          GREGORIAN
NLS_DATE_FORMAT          DD-MON-RR
NLS_DATE_LANGUAGE          AMERICAN
NLS_SORT          BINARY
NLS_TIME_FORMAT          HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT                          DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT          HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT          DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY          $
NLS_COMP          BINARY
NLS_LENGTH_SEMANTICS                          BYTE
NLS_NCHAR_CONV_EXCP                        FALSE
NLS_NCHAR_CHARACTERSET        AL16UTF16          ---------------------国家字符集(⽤的少)
NLS_RDBMS_VERSION          11.2.0.1.0
客户端字符集
SQL> select * from nls_instance_parameters;
PARAMETER              VALUE
------------------------------------------------------------------------------------------------------------------------ ----------------
------------------------------------------------------------------------------------------------------------------------------------------------
NLS_LANGUAGE              AMERICAN
NLS_TERRITORY              AMERICA
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_TIME_FORMAT
NLS_TIMESTAMP_FORMAT
NLS_TIME_TZ_FORMAT
NLS_TIMESTAMP_TZ_FORMAT
NLS_DUAL_CURRENCY
NLS_COMP              BINARY
NLS_LENGTH_SEMANTICS            BYTE
NLS_NCHAR_CONV_EXCP            FALSE
会话字符集
SQL> select * from nls_session_parameters;
PARAMETER              VALUE
------------------------------------------------------------------------------------------------------------------------ ----------------
------------------------------------------------------------------------------------------------------------------------------------------------
NLS_LANGUAGE                              AMERICAN
NLS_TERRITORY              AMERICA
NLS_CURRENCY              $
NLS_ISO_CURRENCY              AMERICA
NLS_NUMERIC_CHARACTERS            .,
NLS_CALENDAR              GREGORIAN
NLS_DATE_FORMAT              DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                      BINARY
NLS_TIME_FORMAT              HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT              DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT              HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT              DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                      BINARY
NLS_LENGTH_SEMANTICS              BYTE
NLS_NCHAR_CONV_EXCP              FALSE
修改会话显⽰为中⽂NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" ----------.bash_profile⾥⾯的参数只是在修改会话的字符集,也可以直接export指定
NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" -------对应的分别是语⾔、地区、字符集。
字符集要求⼀致,但是语⾔设置却可以不同,语⾔设置建议⽤英⽂。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk
NLS作⽤优先级别:Sql function > alter session> 环境变量或注册表> 参数⽂件> 数据库默认参数
环境模拟
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8" 登⼊界⾯显⽰英⽂,在linux sqlplus表中插⼊注释,查看注释正常显⽰为中⽂,sqlplus develop中也正常显⽰,但是sqlplus develop 不能改注释,只能在linux中改
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" 登⼊界⾯显⽰中⽂,在linux中插⼊注释,查看住注释正常显⽰为中⽂,sqlplus develop中也正常显⽰,但是sqlplus develop 不能改注释,只能在linux中改
若想要在sqlplus developer中⽀持中⽂的查看和修改(例如修改表的注释),则在环境变量中加NLS_LANG=AMERICAN_AMERICA.AL32UTF8 --注意:这⾥只要字符集为AL32UTF8就可以,前⾯的语⾔可以任意
Windows  echo %NLS_LANG%
Linux    env | grep NLS_LANG
例如:数据库为GBK
oracle@pdcsh021v03:~> echo $LANG
zh_CN.UTF-8
oracle@pdcsh021v03:~> echo $NLS_LANG
SIMPLIFIED CHINESE_CHINA.AL32UTF8
⼀、修改会话的字符集与数据库的字符集⼀致
数据库查询结果
创建环境变量(只需要字符集⼀致),创建结果与nls_session_parameters的值对应,PL/SQL显⽰结果为中⽂
注:客户端的字符集是在没有设置NLS_LANG环境变量时,会话默认的字符集

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。