您的位置:首页 > 数据库 > Oracle

1. Oracle内置数据类型--字符串, 2. char的大小和字符集有关

2012-10-25 14:10 330 查看
Oracle 数据分为四类

--Oracle_built_in_datatypes 内置数据

--ANSI_supported_datatypes

--user_defined_types 用户自定义数据

--Oracle_supplied_types

内置数据类型中:字符串类型是很重要的一个类型

字符串类型是保存文本信息的类型。文本可能是各种语言的文本,我们知道语言包括很多种,比如英语是字母的,包括26个字母

在计算机里都是用二进制表示,表示的形式就想01010011,一个字节一共有8位

那么,一个字节的长度的二进制有2的8次方=256种组合,英语的所有字符加上控制字符都可以用一个字节的二进制位来表示

所以,常见的英语字符集US7ASCII就是单字节字符集,一个字符的长度就是一个字节

而中文是象形文字,中文的字符集一共有好几千个汉字,可是一个字节只能表示256种不同的字符,所以,就需要两个字节来表示,2的16次方就够了

总结:

英语字符集US7ASCII是单字符字符集,1字符=1BYTE

中文字符集ZHS16GBK是双字符字符集 1字符=2BYTE

--------------------------------------------------------------------分割线-------------------------------------------------------------------------------

ps:

数据类型定义

在%ORACLE_HOME/rdbms/admin下

standard.sql

首先 vi standard.sql

里面有个stdspce.sql

stdspec.sql这个脚本就放着对数据类型,包括很多函数的定义

这个包也是oracle经常用到的

-------------------------------------------------------------------分割线------------------------------------------------------------------------------------

字符串类型在Oracle中分为4种:char 、varchar2、nchar、nvarchar2

1. char(size byte|char)

char的缺省单位是byte,也就是说char(2) = char(2 byte)

char有两种指定长度的方法

第一种: char(2 byte),这是用字节指定,长度为两个字节

第二种: char(2 char),这是用字符指定,长度为两个字符,这就要看数据库的字符集是什么

如果,数据库字符集是双字符集,那么char(2 char)长度就是两个双字节字符,也就是四个字节

那么,如果字符集是三字节字符集,那么char(2 char)长度就是六个字节咯~~

比如,我的Oracle的字符集是中文字符集,那么1char = 2byte,这里,char(2 char)
= 2*2byte = 4byte

1.1 char类型特点

char是一个固定长度的字符类型

这里我定义一个字段a为char(7)类型:

a char(7)

这里a的固定长度为7个字节

下面我给a赋值

a:=’老方块'

这里需要注意,中文字符集通常是双字节字符集,一个汉字2个字节,'老方块'需要用6个字节存放,oracle会额外填充一个字节的空格来达到char(7)的最大值7

6个字节+1个空格



单字节字符集 如英文字符集等

char(5 byte) = 5bytes

char(5 char) = 5×1 byte = 5bytes

双字节字符集 如中文字符集等

char(5 char) = 5×2 bytes = 10 bytes

对于多字节字符集

1 char = n bytes

如 1 char = 3 bytes , char(5 char) = 5×3 bytes = 15bytes

2.varchar2(size byte|char)

varchar2是一个变长度的字符串类型,与char类型不同,Oracle不会用空格填充至最大长度

varchar2的最大长度可以是4k

比如 varchar(7) = ’老方块'

这里varchar(7) 最大长度是7字节,实际存放'老方块'需要6个字节,那么实际存放的还是6字节的内容,不会用空格填充至7个字节。

varchar2是最常见的类型

在TOM的书里推荐在任何情况下都用varchar2,而不用char

3.Nchar(size)

nchar的单位是char 这里 char=几个字节就与数据库字符集有关了

对于Oracle这类全球范围内广泛使用的数据库来讲

在全球化的今天,对于跨国公司除了存在他们主流语言的字符集,还会存在适应不同国家语言字符集的支持

比如BBC公司有主流英文字符集,但它会有中文站,它得支持中文字符集

那么,如果我的数据库是中文字符集,但是,要存入非主流的中文字符,还另外附加了一种字符集,叫国家字符集

也就是所有国家语言都能支持的字符集

世界上专门有一个组织来定义这个字符集叫UNICODE

全球统一编码

比如 我数据库是中文字符集,那么name char(2 char),name字段只能存储中文

而如果name Nchar(2 char),name字段可以存储所有国家的语言字符集

那么如何支持国家字符集呢?

国家的英文单词首字母是N,所以要能用UNICODE,必须是N的字符类型,(换句话说,中文字符集的编码0101是和国家字符集UNICODE的编码不同)

所以Oracle提供了支持国家字符集的类型,由于不同字符集使用同一个字符(单词)所需要的字节长度不一样,空间浪费长度不一样,空间转换所消耗的资源也不一样。

所以我们选择一种最合适的字符集作为内置的数据库字符集,另外设置一份辅助的字符集来解决所有语言字符支持,它就是unicode

总结:

数据库字符集有两种:1、内置字符集。varchar2 用来记录经常使用的同一种语言

2、辅助字符集。 Nvarchar2用来记录别的语言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐