码迷,mamicode.com
首页 > 其他好文 > 详细

字符集的简要概述

时间:2015-02-24 10:18:18      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:字符集的简要概述   nls_lang   vnls_valid_values   字符集的作用和含义   

oracle031

字符集的简要概述
字符集:就是一张字符和编码的对应表。
1、字符集的作用和含义
     字符编码
     使用场合
          数据库字符集
          (1)用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据
          (2)用来标示诸如表名、列名以及PL/SQL变量等
          (3)用来存储SQL和PL/SQL程序单元等
          国家字符集
          (1)用以存储NCHAR, NVARCHAR2, NCLOB等类型数据
2、客户端OS字符集、NLS_LANG设置、服务器端OS字符集、Oracle数据库字符集
     字符集之间的关系
     正确设置字符集
3、字符集出现问题以后的判断流程
     存储的是错误的字符编码
     存储的是正确的字符编码
4、locale、locale -a、chcp

5、字符集命名
Oracle的字符集命名遵循以下命名规则:
<Language><bit size><encoding>
即:  <语言><比特位数><编码>
比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集

US7ASCII //美国人选择的字符集,只能是美国使用的字符不超过128个
zhs16cgb231280//中国人使用的字符集,存储中国部分字符
AL32UTF8//oracle数据库字符集
AF16UTF16//oracle选择国家字符集
ZHS16GBK//中国使用的字符集,是包括所有中国字符,是zhs16chb231280的超集,不是严格超集
utf8// 

超集     严格超集

NLS_LANG=<language>_<territory>.<client character set>
    Language:显示oracle消息,校验,日期命名
    Territory:指定默认日期、数字、货币等格式
    Client character set:指定客户端将使用的字符集
    例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII 
    AMERICAN是语言就是登录到数据库后,数据库自身所提示的信息是那种语言不是字符编码;
    AMERICA是地区表示不同地区所显示信息不同比如说时区、货币等;
    US7ASCII是客户端字符集

Oracle提供若干NLS参数定制数据库和用户机以适应本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通过查询以下数据字典或v$视图查看。
NLS_DATABASE_PARAMETERS--显示数据库当前NLS参数取值,包括数据库字符集取值
NLS_SESSION_PARAMETERS--显示由NLS_LANG 设置的参数,或经过alter session 改变后的参数值(不包括由NLS_LANG 设置的客户端字符集)
NLS_INSTANCE_PARAMETE--显示由参数文件init<SID>.ora 定义的参数V$NLS_PARAMETERS--显示数据库当前NLS参数取值


select * from nls_session_parameters
NLS_LANGUAGE     SIMPLIFIED CHINESE
NLS_TERRITORY     CHINA
NLS_CURRENCY     ¥
NLS_ISO_CURRENCY     CHINA
NLS_NUMERIC_CHARACTERS     .,
NLS_CALENDAR     GREGORIAN
NLS_DATE_FORMAT     DD-MON-RR
NLS_DATE_LANGUAGE     SIMPLIFIED CHINESE
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

select * from nls_database_parameters
NLS_LANGUAGE     AMERICAN
NLS_TERRITORY     AMERICA
NLS_CURRENCY     $
NLS_ISO_CURRENCY     AMERICA
NLS_NUMERIC_CHARACTERS     .,
NLS_CHARACTERSET     ZHS16GBK
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

select userenv(‘language‘) from dual;//查询客户端的
USERENV(‘LANGUAGE‘)
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

select nls_charset_name(to_number(‘0354‘,‘xxxx‘)) from dual;

NLS_CHARSET_NAME(TO_NUMBER(‘0354‘,‘XXXX‘
----------------------------------------
ZHS16GBK

echo $NLS_LANG

SQL> !echo $NLS_LANG
american_america.zhs16gbk

select to_char(nls_charset_id(‘ZHS16GBK‘), ‘xxxx‘) from dual;

TO_CH
-----
  354

SQL>

select  dump(‘abc‘,1016) from dual;
DUMP(‘ABC‘,1016)
--------------------------------------------
Typ=96 Len=3 CharacterSet=ZHS16GBK: 61,62,63

SQL>

select * from V$NLS_VALID_VALUES;//This view lists all valid values for NLS parameters.


如果软件有字符集,那么系统的字符集就会失效;假如软件不带字符集,那么久使用操作系统的字符集

oracle的所有字符集转换都是在oracle端转换的
oracle接受的都是已经编号码的字符
oracle存储的都是oracle数据库的编码格式存储的
oracle需要在编码之前询问传来的端使用什么编码的,假如相同就直接存储,不同就转码而客户端只编码

NLS_LANG参数要和客户端操作系统的字符集一致。NLS_LANG相当于于oracle打交道的
sql developer和sqlplus一样没有字符集
技术分享技术分享









字符集的简要概述

标签:字符集的简要概述   nls_lang   vnls_valid_values   字符集的作用和含义   

原文地址:http://blog.csdn.net/u011218159/article/details/43924225

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!