参考链接1: https://blog.csdn.net/xinzhan0/article/details/78311417#t3
参考链接2: https://blog.csdn.net/xinzhan0/article/details/783115621、操作系统本身有字符集 ---locale -a
或者chcp
AL32UTF8
【AL】支持所有语言(All Language) 【32】每字符最多占用32位(4字节) 【UTF8】编码为UTF-8WE8MSWIN1252
【WE】支持西欧语言(Western Europe) 【8】每字符需要占用8位(单字节) 【MSWIN1252】编码为CP1252US7ASCII
【US】表示美国(United States) 【7】每字符需要占用7位 【ASCII】编码为ASCII字符集说白了是一个集合 ,是一张表,这个表有两列,左面这列是字符是所有要存储的字符。
字符有很多字符 ,比如我们讲中文字符: 左面这列就是中国人常用的所有的中文字符 ,有汉字、英文字母有数字还有一些特殊的符号 ,在左面都出现是我们中文要使用的所有的字符 右边是一个编码,从1号2、3、4、5、6 ,将来提到1的时候就对应着一个字符 所以说字符集就是字符和编码的这么一个对应表常用字符集:
US7ASCII ZHS16CGB231280 AL32UTF8 AF16UTF16 ZHS16GBK数据库字符集
SQL> select * from nls_database_parameters;PARAMETER VALUE------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CHARACTERSET AL32UTF8 -------------数据库字符集NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSENLS_NCHAR_CHARACTERSET AL16UTF16 ---------------------国家字符集(用的少)NLS_RDBMS_VERSION 11.2.0.1.0
客户端字符集
SQL> select * from nls_instance_parameters; PARAMETER VALUE------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_SORTNLS_DATE_LANGUAGENLS_DATE_FORMATNLS_CURRENCYNLS_NUMERIC_CHARACTERSNLS_ISO_CURRENCYNLS_CALENDARNLS_TIME_FORMATNLS_TIMESTAMP_FORMATNLS_TIME_TZ_FORMATNLS_TIMESTAMP_TZ_FORMATNLS_DUAL_CURRENCYNLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSE
会话字符集
SQL> select * from nls_session_parameters; PARAMETER VALUE------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_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 $LANGzh_CN.UTF-8oracle@pdcsh021v03:~> echo $NLS_LANGSIMPLIFIED CHINESE_CHINA.AL32UTF8
一、修改会话的字符集与数据库的字符集一致
数据库查询结果
创建环境变量(只需要字符集一致),创建结果与nls_session_parameters的值对应,PL/SQL显示结果为中文 注:客户端的字符集是在没有设置NLS_LANG环境变量时,会话默认的字符集