Oracle 11g Release 1 (11.1) 单行函数——NLS 字符函数
http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions001.htm#autoId2
本文内容
- NLS 字符函数
- 返回数字值的字符函数
Oracle 字符函数包括:
- 返回字符值的字符函数
- NLS 字符函数
- 返回数字值的字符函数
NLS 字符函数
NLS 字符函数返回关于字符集的信息。NLS 字符函数包括:NLS_CHARSET_ID、NLS_CHARSET_DECL_LEN 和 NLS_CHARSET_NAME。
NLS_CHARSET_DECL_LEN
NLS_CHARSET_ID
NLS_CHARSET_NAME
NLS_CHARSET_ID(string)
NLS_CHARSET_ID 函数返回字符集对应的 ID。string 参数是 VARCHAR2 值。'CHAR_CS' 的 string 值返回服务器数据库字符集 ID。'NCHAR_CS' 的 string 值返回服务器国际化字符集 ID。
无效字符集返回 null。
示例 1:演示 NLS_CHARSET_ID。
SQL> SELECT NLS_CHARSET_ID('ja16euc') FROM DUAL;
NLS_CHARSET_ID('JA16EUC')
-------------------------
830
SQL>
NLS_CHARSET_DECL_LEN(byte_count,'char_set_id')
NLS_CHARSET_DECL_LEN 函数返回一个 NCHAR 列的声明长度(也就是字符个数)。byte_count 参数是列的宽度。'char_set_id' 参数是字符集 ID。
示例 2:演示 NLS_CHARSET_DECL_LEN。当使用多字节字符集时,返回 200 个字节列的字符个数。
SQL> SELECT NLS_CHARSET_DECL_LEN(200, NLS_CHARSET_ID('ja16eucfixed')) as a
2 FROM DUAL;
NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EUCFIXED'))
--------------------------------------------------------
100
SQL>
NLS_CHARSET_NAME(number)
NLS_CHARSET_NAME 函数返回字符集 ID 对应的字符集名称。字符集名称作为 VARCHAR2 值以数据库字符集返回。
若数字无法识别为字符集的 ID,则返回 null。
示例 3:演示 NLS_CHARSET_NAME。
SQL> SELECT NLS_CHARSET_NAME(2) FROM DUAL;
NLS_CH
------
WE8DEC
SQL>
EBCDIC
EBCDIC(Extended Binary Coded Decimal Interchange Code,广义二进制编码的十进制交换码,读作 "ehb-suh-dik" 或 "ehb-kuh-dik")是 IBM 于1963 年- 64 年间推出的字符编码表,根据早期打孔机式的二进化十进数(Binary Coded Decimal,BCD)排列而成。
EBCDIC 是 IBM 为它更大型的操作系统而开发。在一个 EBCDIC 文件里,每个字符(字母或数字)被表示为一个 8 位的二进制。而 IBM 个人计算机和工作站不使用它们的 EBCDIC 编码,而是工业标准编码 ASCII 码。
EBCDIC 缺点是英文字母不是连续地排列,中间出现多次断续,为编写程序的人带来了一些困难。
UCS
UCS(Universal Character Set/Universal Multiple-Octet Coded Character Set,通用字符集)由 ISO 制定(ISO 10646 或 ISO/IEC 10646、ISO/IEC 10646-1、ISO/IEC 10646-2)。
UCS 包括所有其他字符集,保证与其他字符集的双向兼容。UCS 包含已知语言的所有字符。除拉丁语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括中文、日文、韩文这样的方块文字,以及大量的图形、印刷、数学、科学符号。
Unicode
Unicode(统一码、万国码、单一码、标准万国码)是计算机领域的业界标准。它对世界上大部分的文字系统进行了整理和编码,使电脑可以更为简化地呈现和处理文字。
Unicode 随通用字符集(Universal Character Set,UCS)标准而发展。Unicode 一直在不断改进,每个新版本都加入更多的新字符。Unicode 涵盖了除字形、编码方法、标准字符编码外,还包含字符特性,如大小写字母。
Unicode 由非营利机构——统一码联盟负责,致力于让 Unicode 取代既有的字符编码方案。因为,它们空间有限,不适用于多语环境。因此,Unicode 备受认可,并广泛地应用于电脑软件的国际化与本地化过程。
Unicode 与 UCS
历史上存在两个独立的尝试创立单一字符集的组织,即 ISO 和统一码联盟,因此最初制定了不同的标准。1991 年,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,开始合作,两者都同意保持码表兼容,并紧密地共同调整任何未来的扩展。
Unicode 标准包含了 ISO/IEC 10646-1 实现级别 3 的基本多文种平面。两个标准的所有字符都在相同的位置并且有相同的名字。ISO/IEC 10646 只不过是一个简单的字符集表。而 Unicode 标准,额外定义了许多与字符有关的语义符号学。Unicode 使用更为广泛。但一般认为,用于打印 ISO/IEC 10646-1 标准的字体在某些方面的质量,要高于 Unicode。
UTF-8 和 UTF-16
UTF-8(8-bit Unicode Transformation Format)是一种针对 Unicode 可变长度字符编码,也是一种前缀码。可以用来表示 Unicode 标准中的任何字符,且其编码中的第一个字节与 ASCII 兼容。因此,它逐渐成为电子邮件、网页及其他储存或传送文字的应用中,优先采用的编码。
UTF-8 使用一到四个字节为每个字符编码:
- 128 个 ASCII 字符只需一个字节编码(Unicode 范围 U+0000 - U+007F)
- 带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母,则需要二个字节编码(Unicode 范围 U+0080 - U+07FF)
- 其他基本多文种平面(BMP)的字符(包含大部分常用字)使用三个字节编码
- 其他极少使用的 Unicode 辅助平面的字符使用四字节编码。
对上面的第四种字符而言,UTF-8 似乎太耗费资源。
但 UTF-8 对所有常用的字符都可以用三个字节表示——UTF-16 编码。对第四种字符同样需要四个字节来编码,所以,是 UTF-8 更有效率,还是 UTF-16,视所使用字符的分布范围而定。不过,若使用一些压缩系统,如 deflate,则这些不同编码系统间的差异就微不足道了。若顾及传统压缩算法在压缩较短文字上的效果不大,可以考虑使用 Unicode 标准压缩格式(SCSU)。
互联网工程工作小组(IETF)要求所有互联网协议都必须支持 UTF-8 编码。互联网邮件联盟(IMC)建议所有电子邮件软件都支持UTF-8 编码。
ASCII
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码,读作 ˈæski' 或 ASS-kee)是基于拉丁字母的一套编码系统,国际标准 ISO/IEC 646。主要用于显示现代英语,其扩展版本EASCII 则可以勉强显示其他西欧语言。ASCII 是现今最通用的单字节编码系统,但有被 Unicode取代的迹象。