Oracle字符集相关知识

Oracle的字符集命名遵循以下命名规则:

    <Language><bit size><encoding>
    AL32UTF8/AL16UTF16/ZHS16GBK(AL=ALL)

Oracle客户端字符集(NLS_LANG):

     Oracle使用的系统环境变量,主要用于传输过程中进行转换判断,格式为<language>_<territory>.<character_set>,如:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
     language控制消息、日期、月份等的显示格式,territory会影响默认日期、货币值、数字等的显示格式,character_set控制客户端应用使用的字符集。

数据库字符集(NLS_CHARACTERSET):

     在创建数据库实例时设置,控制数据库的字符集。

国家字符集(NLS_NCHAR_CHARACTERSET):

     在创建数据库实例时设置,控制数据库中NCHAR, NVARCHAR2, NCLOB等类型数据

查询Oracle相关字符集设置:

--数据库字符集
SELECT * FROM NLS_DATABASE_PARAMETERS;

--实例字符集环境
SELECT * FROM NLS_INSTANCE_PARAMETERS;

--会话字符集环境
SELECT * FROM NLS_SESSION_PARAMETERS;

--客户端字符集
SELECT * FROM V$NLS_PARAMETERS;
SELECT USERENV('language') FROM DUAL;

字符/字符集/字符编码介绍:

字符(Character):
    字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或无线电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符。

字符集(Character Set):
    字符集是多个字符的集合。字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。
    UNICODE:
        Unicode译为统一码,也叫万国码、单一码是计算机科学领域里的一项业界标准,是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。
        Unicode字符集可以简写为UCS(Unicode Character Set)。UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF。UCS-4是用四个字节表示代码点,取值范围为范围为U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。
        Unicode编码规则包括:UTF-8、UTF-16、UTF-32。

字符编码(Character encoding):
    字符编码也称字集码,是编码规则,把字符集中的字符编码为指定集合中某一对象例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。
    ASCII:
        ASCII((American Standard Code for Information Interchange):美国信息交换标准代码) 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。
        它是一个7位的编码标准(剩下的1位二进制为0),最后一次更新则是在1986年,包括33个控制代码(0~31和127)、空格(32)、10个数字(48~57)、26个大写字母(65~90)、26个小写字母(97~122)和32个符号,共128个代码。其中33个字符无法显示(一些终端提供了扩展,使得这些字符可显示为诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符。控制字符的用途主要是用来操控已经处理过的文字。在33个字符之外的是95个可显示的字符。用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。
    ANSI:
        ANSI((American National Standards Institute):美国国家标准学会) 是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f范围的1个字节来表示1个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。
        不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI编码。是在ASCII基础上进行的扩充。
        ANSI并不是某一种特定的字符编码,而是在不同的系统中表示不同的编码,在简体中文系统中它是GB18030,在韩文系统中它是EUC-KR。不同ANSI编码之间互不兼容。
    UTF(Unicode Transformation Formats)系列:    
        UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。由于较小值的编码点一般使用频率较高,直接使用Unicode编码效率低下,大量浪费内存空间。UTF-8就是为了解决向后兼容ASCII码而设计,Unicode中前128个字符,使用与ASCII码相同的二进制值的单个字节进行编码,而且字面与ASCII码的字面一一对应,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。
        UTF-8使用一至六个字节为每个字符编码(尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多四个字节):
            1.128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。
            2.带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要两个字节编码(Unicode范围由U+0080至U+07FF)。
            3.其他基本多文种平面(BMP)中的字符(这包含了大部分常用字,如大部分的汉字)使用三个字节编码(Unicode范围由U+0800至U+FFFF)。
            4.其他极少使用的Unicode 辅助平面的字符使用四至六字节编码(Unicode范围由U+10000至U+1FFFFF使用四字节,Unicode范围由U+200000至U+3FFFFFF使用五字节,Unicode范围由U+4000000至U+7FFFFFFF使用六字节)
    
        UTF-16是Unicode字符编码五层次模型的第三层:字符编码表的一种实现方式。即把Unicode字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递。
        UTF-16可看成是UCS-2的父集。在没有辅助平面字符(surrogate code points)前,UTF-16与UCS-2所指的是同一的意思。

        UTF-32是32位Unicode转换格式的缩写。UTF-32是一种用于编码Unicode的协定,该协定使用32位比特对每个Unicode码位进行编码。与其他可变长度的Unicode转换格式(UTF)相比,UTF-32编码长度是固定的,UTF-32中的每个32位值代表一个Unicode码位,并且与该码位的数值完全一致。
        UTF-32和UCS4能表示的字符是相同的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值