字符集问题的初步探讨(二)

原创 2004年09月13日 14:26:00

字符集问题的初步探讨(二)

--数据库的字符集

Saturday, 2004-09-11 11:38 Eygle

 
原文发表于itpub技术丛书《Oracle数据库DBA专题技术精粹》,未经许可,严禁转载本文.

原文链接:

http://www.eygle.com/special/NLS_CHARACTER_SET_02.htm


2. 数据库的字符集

 

字符集在创建数据库时指定,在创建后通常不能更改,所以在创建数据库时能否选择一个正确的字符集就显得尤为重要。

在创建数据库时,我们可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。
字符集用来存储:
     CHAR, VARCHAR2, CLOB, LONG等类型数据
     用来标示诸如表名、列名以及PL/SQL变量等
     SQL和PL/SQL程序单元等
国家字符集用以存储:
     NCHAR, NVARCHAR2, NCLOB等类型数据

这些设置在数据库创建时指定,我们可以看一下数据库的创建脚本:


connect SYS/change_on_install as SYSDBA
set echo on
spool E:/oracle/ora92/assistants/dbca/logs/CreateDB.log
startup nomount pfile="E:/oracle/admin/eygle/scripts/init.ora";
CREATE DATABASE eygle
MAXINSTANCES 1
MAXLOGHISTORY 1
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
DATAFILE 'E:/oracle/oradata/eygle/system01.dbf' SIZE 250M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE 'E:/oracle/oradata/eygle/temp01.dbf' SIZE 40M REUSE AUTOEXTEND
ON NEXT 640K MAXSIZE UNLIMITED
UNDO TABLESPACE "UNDOTBS1" DATAFILE 'E:/oracle/oradata/eygle/undotbs01.dbf' SIZE 50M REUSE AUTOEXTEND
ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16

LOGFILE GROUP 1 ('E:/oracle/oradata/eygle/redo01.log') SIZE 10M,
GROUP 2 ('E:/oracle/oradata/eygle/redo02.log') SIZE 10M,
GROUP 3 ('E:/oracle/oradata/eygle/redo03.log') SIZE 10M;
spool off
exit;


以上用粗体显示的就是对我们至关重要的字符集设置。

在创建数据库的过程中,在以下界面选择你的字符集,对于简体中文平台,缺省的字符集是:ZHS16GBK

 

一旦你的字符集选定了,数据库中能够存储的字符就受到了限制,所以你选择的字符集的应该可以容纳所有你将用到字符。

常见的中文字符集有:

 

ZHS16CGB231280 	CGB2312-80 	16-bit Simplified Chinese MB, ASCII
ZHS16GBK GBK 16-bit Simplified Chinese MB, ASCII, UDC

其中GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,
1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。
GBK编码是1995年12月颁布的指导性规范。
GBK与国家标准 GB 2312-80 信息处理交换码所对应的、事实上的内码标准兼容;同时,在字汇一级支持 ISO/IEC 10646-1 和
GB 13000-1 的全部中日韩 (CJK) 汉字(20902字)。包含了更多的编码。

但是我们说,ZHS16GBK 并非是ZHS16CGB231280的严格超集(虽然后者的汉字在前者中都存在,但是同样的编码在不同两个
字符集中可能表达不同的汉字),所以在做数据库字符转换时仍然需要特别注意。

 

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

 

     <Language><bit size><encoding>
即: <语言> <比特位数><编码>
比如: ZHS · 16 ·GBK

需要说明的是,有些字符集命名违背了这个规范,Oracle8/Oralce8i中的UTF-8是第一个打破这个命名规范的字符集。
我们可以看到一类字符集以 AL开头,如:
     AL16UTF16
其中 AL代表 ALL,指适用于所有语言(All Languages),按照这个标准当年UTF-8本应被命名为AL24UTF8。

手机管理应用研究【1】——总篇

说明 由于自己一直以来对手机管理方面的东西比较感兴趣,加上最近以来老大的驱动,所以决定研究整理一下root相关技术(不局限于root)。手机Root是一门大学问,root的招数各有不同。Root权...
  • zhgxhuaa
  • zhgxhuaa
  • 2014年07月22日 15:33
  • 2472

PostgreSQL字符集问题

转自:osdba的文章《初学者遇到的PostgreSQL字符集问题的解决》当初学者在使用PostgreSQL数据库,输入中文时,会遇到“ERROR: invalid byte sequence fo...
  • fm0517
  • fm0517
  • 2016年11月11日 16:55
  • 1412

《苏菲的世界》~哲学是什么?

亲爱的苏菲:   人的嗜好各有不同。有的人喜欢收集古钱或外国邮票,有的人喜欢刺绣,有的人则利用大部分的空间时间从事某种运动。   另外有许多人以阅读为乐,但阅读的品味人各不同。有的人喜欢看报纸和漫画,...
  • leiaixue
  • leiaixue
  • 2014年01月16日 18:52
  • 1087

字符集问题的初步探讨-乱码的产生

通常在我们的现实环境中,存在3个字符集设置。第一: 客户端应用字符集(Client Application Character Set)第二: 客户端NLS_LANG参数设置第三: 服务器端,数据库字...
  • ppby2002
  • ppby2002
  • 2011年06月08日 17:54
  • 348

DBCoffer与Oracle字符集问题探讨

引言数据库保险箱(简称DBCoffer) 是一款基于Oracle扩展机制实现的,数据高度安全、应用完全透明、密文高效访问的Oracle数据安全增强产品。DBCoffer可以防止绕过防火墙的外部数据攻击...
  • liaojiabo
  • liaojiabo
  • 2011年07月08日 22:16
  • 354

linux 下修改字符集的问题

  • 2013年07月09日 20:01
  • 548B
  • 下载

问题共享:修改oracle字符集

  • 2011年11月23日 18:15
  • 48KB
  • 下载

详细介绍各种字符集编码转换问题

  • 2011年11月25日 16:51
  • 130KB
  • 下载

Oracle字符集的问题.docx

  • 2015年12月20日 23:02
  • 13KB
  • 下载

关于GBK和Unicode字符集转换乱码问题

  • 2015年05月11日 11:35
  • 846B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符集问题的初步探讨(二)
举报原因:
原因补充:

(最多只允许输入30个字)