最近看到一个关于Oracle字符集的文章, 对字符集的基本知识讲解的不错, 特此摘抄. 重点关注GB2312/GBK/GB18030的关系
讲到数据库的字符集设置,首先需要对字符集的知识有些了解。以下是字符集的基本知识介绍:由于计算机只能存储使用二进制数据,因此对于一些字符或符号,需要对它们进行编码,用编码后的数值来表示这些字符。对于一组符号的编码集合就是字符集。
字符集有很多种,最初的字符集是ASCII,它用一个字节中的7位来表示128个字符,第8位没有使用。它包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)等。由于ASCII支持的字符很有限,因此随后又出现了很多的编码方案,这些编码方案大部分都是包括了ASCII的,它们只是做了扩展,这些扩展的内容一般各不相同,因此说ASCII是一个比较基本的编码,EBCDIC编码是另一个比较基本的编码,它的部分字符采用了和ASCII不同的编码值,因此两者是不兼容的基本编码方案。采用EBCDIC编码的比较少,目前主要是IBM 的系统采用,如AS400及S390系统,大部分的系统都是基于ASCII编码的。
由于亚洲国家的字符集相对复杂一些,因此一般都使用了两个及以上的字节进行编码的方案。对于简体中文,GB2312码是国家1981年实施的编码标准,通行于大陆。新加坡等地也使用此编码。GBK编码是GB2312码的扩展,是1995年发布的指导性规范,它在字汇一级支持 ISO/IEC 10646-1 和GB 13000-1 的全部中日韩 (CJK) 汉字(20902字)。目前最新的汉字字符集是2000年的GB18030,它是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。目前简体WINDOWS的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,因此GBK还是我们目前最常用的简体中文字符集。
由于编码方案太多且彼此之间不兼容,存在互相之间存在冲突的情况,即对于同一个编码数值,在两种不同的编码方案中代表的是两个不同的字符。这样对于一些WEB应用来说,由于多种语言文字的同时使用及存储,需要采用一种统一的字符集。为此,国际标准化组织(ISO)制定了ISO 10646码表,而Unicode协会制定了Unicode规范,这两个体系刚开始时是独立建立的,在1991年,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2006年的Unicode 5.0。ISO的最新标准是10646-3:2003。下面简单介绍一下几种常见的编码方式:
UCS(Universal Character Set)是按ISO-10646定义的字符集,有两种最常用编码方式: UCS-2和UCS-4。
UCS-2:使用0-65535之间的数表示一个unicode字符。UCS-2无法表示所有的unicode字符,只能表示其前65536个字符(称为Basic Multilingual Plane,BMP)。我们一般经常使用的UNICODE码就是指这个编码方案。
UCS-4:使用0-FFFFFFFF之间的数表示一个unicode字符,但为了和unicode体系兼容(unicode体系是一个20bit系统),ISO-10646表示所有定义的字符将不超过10FFFF。UCS-4可以表示所有的unicode字符。
Unix 下使用 UCS-2/UCS-4会导致非常严重的问题,因为有一些特殊的字符, 比如 ''\0'' 或 ''/'', 它们在文件名和其他C的库函数参数里都有特别的含义,C语言使用''\0''作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉 。
为了解决这个问题,于是产生了将Unicode编码规则和计算机的实际编码对应起来的一个规则,UTF,英文为UCS Transformation Format,即UCS转换格式,目前常用的有UTF-8、UTF-16、UTF-32三种。(还有UTF-7在此就不介绍了)。正如名字所示,它们分别使用8位、16位、32位比特对UCS进行编码。
UTF-8:一种变长的Unicode编码方式,使用1到4个字节表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码作为它的一部分,因此在ASCII表示的128个字符在UTF-8的编码没有变化,它的兼容性比较好。UTF-8在目前WEB应用上使用很广泛。
UTF-16:一种变长Unicode编码方式,使用两个或者四个字节表示一个字符。这种编码方式比较节省空间,因为它把最常使用的字符都用两个字节来表示,而那些不常用的字节则用两个或四个字节来表示。但对于英文字符来说,它要用两个字节来编码。
UTF-32:一种固定长度的Unicode编码方式,使用四个字节表示一个字符,它适用在内存很充足,需要定长的编码场合。
分享到:
相关推荐
Java字符集基础知识与问题 字符集编码是计算机处理文本数据的基础,不同的编码方式适用于不同的应用场景。本文主要讨论编码的基本知识,特别是与Java相关的部分,包括ISO8859-1、GB2312/GBK、Unicode以及UTF编码。...
字符集基础知识是编程领域不可或缺的一部分,特别是在处理多语言和国际化问题时。本文主要围绕字符集的概念,特别是如何解决Java中的乱码问题进行了详尽的解释。以“中文”二字为例,我们可以深入理解从Java源文件到...
在计算机科学领域,字符集(Character Set)是用于表示文本的一组符号集合,它定义了可以被编码的字符范围...了解这些字符集的基本知识,对于开发者来说是进行国际化开发的基础,也是解决多语言环境下文本问题的关键。
字符集和字符编码是计算机处理文本的基础,它们决定了如何将人类使用的文字和符号转换成计算机可以...了解这些字符集和编码的知识,有助于在编程、网页设计、数据库管理等领域正确处理多语言文本,确保信息的准确传输。
#### 一、字符集基础知识 **1. 字符集定义:** 字符集是指用于表示文字的一组符号集合。在计算机科学领域,字符集是用于编码文本的基础,它规定了如何用数字表示各种字符。不同的字符集支持不同语言的文字显示。 *...
【Sybase ASE字符集知识详解】 Sybase Adaptive Server Enterprise(ASE)是一款强大的关系型数据库管理系统...无论是开发人员、DBA还是系统管理员,都需要掌握这些基础知识,以确保系统的稳定运行和数据的正确处理。
#### 二、基础知识概述 1. **字符集**:字符集是用于定义字符编码方案的一组规则,它规定了如何将字符映射到二进制代码上。不同的字符集可以支持不同的语言文字。 2. **CP850与CP936**: - **CP850**:也称为OEM ...
本文将深入探讨Oracle数据库的导入导出命令,特别是如何更改字符集的相关知识。 首先,Oracle数据库提供了两种主要的数据导入导出工具:`expdp`(Export Data Pump)和`impdp`(Import Data Pump)。这两个实用程序...
本文将详细介绍Sybase字符集的相关知识点,并通过具体的例子来说明如何设置和配置Sybase的字符集。 #### 二、Sybase字符集的基本概念 **1. 字符集定义:** 字符集是用于表示文本中字符的一种标准集合。在数据库...
#### 二、Oracle字符集的基础知识 1. **Oracle字符集的基本概念**: - **字符集(Character Set)**:用于定义如何表示文字和符号的集合。 - **国家字符集(National Character Set)**:为特定语言环境定义的...
本文将围绕“MySQL字符集转换”这一主题展开讨论,通过对给定文件中的标题、描述、标签以及部分内容进行分析,旨在深入讲解MySQL字符集转换的相关知识点。 #### 二、MySQL字符集概述 在开始详细介绍之前,我们先来...
ISO8859-1(WE8ISO8859P1)是西方语言的基本字符集,包含拉丁字母和一些特殊符号,不支持中文字符。而GB2312是中国早期的简体中文字符集,主要针对简体汉字,支持6763个汉字。GBK是在GB2312基础上扩展的,增加了更多...
总之,理解和掌握Web开发中的字符集和字符编码是避免乱码、确保数据正确显示的基础。开发者应确保在各个层面(浏览器、服务器、数据库)都正确设置和处理字符编码,以保证信息的准确传递。在实际工作中,要时刻关注...
### Windows字符集知识点详解 #### 一、概述 在计算机科学与信息技术领域中,字符集是一种重要的基础概念,它定义了一组符号与用于表示这些符号的数字编码方式。本篇文章将基于提供的PDF文档《Windows字符集.pdf》...
同时,理解这些基础知识也有助于我们更好地理解和利用各种工具,如文本编辑器、数据库系统、编程语言等。 总的来说,字符集和字符编码是计算机处理文本的核心,它们在信息技术的各个领域都有广泛的应用。从简单的...
#### 三、字符集相关知识 **3.1 字符集定义** 字符集是指按照一定的字符编码方案,为一组特定的符号赋予不同数值编码的集合。Oracle 最早支持的字符集编码是 US7ASCII。 **3.2 Oracle 字符集命名规则** Oracle ...
#### 一、字符集基本概念 **ORACLE数据库字符集**,也称为Oracle全球化支持(Globalization Support)或国家语言支持(NLS),它主要用于存储、处理和检索数据时能够使用各种不同的语言和格式。通过全球化支持,...
本文将从基础概念开始,逐步引导读者了解字符集编码转换的相关知识。 首先,让我们了解什么是 ASCII 编码。ASCII 编码是英文显示文字所需要的 256 个字符(比如,英文字母、数字、标点符号等等)。但是,对于中文来...