钟秀

沉如土 疾如风 侵如火 上善若水

数据库字段类型

  • Oracle 数据库类型

字段类型        中文说明                            限制条件                        其它说明

----------      ---------------------------------- ------------------------------ --------------

CHAR            固定长度字符串               最大长度2000 bytes   

VARCHAR2   可变长度的字符串           最大长度4000 bytes         可做索引的最大长度749

NCHAR          根据字符集而定的固定长度字符串 最大长度2000 bytes   

NVARCHAR2  根据字符集而定的可变长度字符串 最大长度4000 bytes   

DATE            日期(日-月-年) DD-MM-YY(HH-MI-SS)                      经过严格测试,无千虫问题

LONG           超长字符串                   最大长度2G(231-1)             足够存储大部头著作

RAW             固定长度的二进制数据       最大长度2000 bytes       可存放多媒体图象声音等

LONG RAW   可变长度的二进制数据        最大长度2G                 同上

BLOB           二进制数据                     最大长度4G  

CLOB           字符数据                       最大长度4G  

NCLOB         根据字符集而定的字符数据        最大长度4G  

BFILE           存放在数据库外的二进制数据     最大长度4G  

ROWID         数据表中记录的唯一行号         10 bytes                 ********.****.****格式,*为0或1

NROWID       二进制数据表中记录的唯一行号     最大长度4000 bytes

NUMBER(P,S)    数字类型                                                        P为整数位,S为小数位

DECIMAL(P,S)    数字类型                                                       P为整数位,S为小数位

INTEGER         整数类型                                                          小的整数

FLOAT           浮点数类型                                                        NUMBER(38),双精度

REAL            实数类型                                                             NUMBER(63),精度更高

 

转:http://blog.163.com/pengpeng_dev/blog/static/1208834102009918112138945/

 

 

Character 数据类型
  Character 数据类型用来存储字母数字型数据。当你在oracle 中定义一个character 数据时,通常需要制定字段的长度,它是该字段的最大长度。ORACLE提供以下几种character 数据类型:
  
  CHAR() CHAR数据类型是一种有固定长度和最大长度的字符串。存储在数据类型为CHAR字段中的数据将以空格的形式补到最大长度。长度定义在1——2000字节之间。
  
  当你创建一个CHAR型字段,数据库将保证在这个字段中的所有数据是定义长度,如果某个数据比定义长度短,那么将用空格在数据的右边补到定义长度。如果长度大于定义长度将会触发错误信息。
  
  VARCHAR() varchar型数据是varchar2型数据的快照。
  
  VARCHAR2() varchar2数据类型是一种可变长度的、有最大长度的字母数字型数据。Varchar2类型的字段长度可以达到4000字节,Varchar2类型的变量长度可以达到32676字节。
  
  一个空的varchar2(2000)字段和一个空的varchar2(2)字段所占用的空间是一样的。
  
  NCHAR() 和 NVARCHAR2() NCHAR() 和 NVARCHAR2()数据类型分别与CHAR() 和 VARCHAR2()类型是相同的,只不过它们用来存储NLS(National Language Support)数据。
  
  LONG LONG 数据类型是一个遗留下来的而且在将来不会被支持的数据类型。它将被LOB(Large Object)数据类型所代替。
  
  比较规则 Varchar2和char数据类型根据尾部的空格有不同的比较规则。对Char型数据,尾部的空格将被忽略掉,对于Varchar2型数据尾部带空格的数据排序比没有空格的要大些。比如:
  
  Char 型数据:       ‘YO’=‘YO   ’
  
  Varchar2型数据:      ‘YO’<’YO   ’
  
  Numberic 数据类型
  
  Numberic 数据类型用来存储负的和正的整数、分数和浮点型数据,范围在-1*10-103 和9.999…99*10125之间,有38位的精确度。标识一个数据超出这个范围时就会出错。
  
  Number(

,) Number数据类型存储一个有p位精确度的s位等级的数据。
  
  DATE 数据类型
  DATE 数据类型用来存储日期和时间格式的数据。这种格式可以转换为其他格式的数据去浏览,而且它有专门的函数和属性用来控制和计算。以下的几种信息都包含在DATE数据类型中:
  
  Century
  
  Year
  
  Month
  
  Day
  
  Hour
  
  Minute
  
  Second
  
  LOB 数据类型
  LOB(Large Object) 数据类型存储非结构化数据,比如二进制文件,图形文件,或其他外部文件。LOB 可以存储到4G字节大小。数据可以存储到数据库中也可以存储到外部数据文件中。LOB数据的控制通过DBMS_LOB 包实现。BLOB, NCLOB, 和CLOB 数据可以存储到不同的表空间中,BFILE存储在服务器上的外部文件中。LOB数据类型有以下几种:
  
  BLOB: 二进制数据
  
  CLOB: 字符型数据
  
  BFILE: 二进制文件
  
  其他数据类型
  
  ROWID ROWID 数据类型是ORACLE数据表中的一个伪列,它是数据表中每行数据内在的唯一的标识。
转:http://blog.sina.com.cn/s/blog_4c81e6230100ingg.html

 

  • SQL数据库字段类型说明

bit 0或1的整型数字

  int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字

  smallint 从-2^15(-32,768)到2^15(32,767)的整型数字

  tinyint 从0到255的整型数字

  decimal 从-10^38到10^38-1的定精度与有效位数的数字

  numeric decimal的同义词

  money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十

  smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十

  float 从-1.79E+308到1.79E+308可变精度的数字

  real 从-3.04E+38到3.04E+38可变精度的数字

  datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒

  smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟

  timestamp 时间戳,一个数据库宽度的唯一数字

  uniqueidentifier 全球唯一标识符GUID

  char 定长非Unicode的字符型数据,最大长度为8000

  varchar 变长非Unicode的字符型数据,最大长度为8000

  text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)

  nchar 定长Unicode的字符型数据,最大长度为8000

  nvarchar 变长Unicode的字符型数据,最大长度为8000

  ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G)

  binary 定长二进制数据,最大长度为8000

  varbinary 变长二进制数据,最大长度为8000

  image 变长二进制数据,最大长度为2^31-1(2G)

 

bit 0或1的整型数字

  int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字

  smallint 从-2^15(-32,768)到2^15(32,767)的整型数字

  tinyint 从0到255的整型数字

  decimal 从-10^38到10^38-1的定精度与有效位数的数字

  numeric decimal的同义词

  money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十

  smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十

  float 从-1.79E+308到1.79E+308可变精度的数字

  real 从-3.04E+38到3.04E+38可变精度的数字

  datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒

  smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟

  timestamp 时间戳,一个数据库宽度的唯一数字

  uniqueidentifier 全球唯一标识符GUID

  char 定长非Unicode的字符型数据,最大长度为8000

  varchar 变长非Unicode的字符型数据,最大长度为8000

  text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)

  nchar 定长Unicode的字符型数据,最大长度为8000

  nvarchar 变长Unicode的字符型数据,最大长度为8000

  ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G)

  binary 定长二进制数据,最大长度为8000

  varbinary 变长二进制数据,最大长度为8000

  image 变长二进制数据,最大长度为2^31-1(2G)

 

 

1)char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

后面三种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

(2)datetime和smalldatetime
datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。

(3)bitint、int、smallint、tinyint和bit
bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。
int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。
smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。
tinyint:从0到255的整数数据。
bit:1或0的整数数据。

(4)decimal和numeric
这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。

(5)float和real
float:从-1.79^308到1.79^308之间的浮点数字数据。
real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。



数据库定义到char类型的字段时,不知道大家是否会犹豫一下,到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间,而且处理起来会快些,无法定长只好选用定长,并且将长度设置尽可能地小;另一种是则是觉得无所谓,尽量用可变类型的,长度尽量放大些。

鉴于现在硬件像萝卜一样便宜的大好形势,纠缠这样的小问题实在是没多大意义,不过如果不弄清它,总觉得对不起劳累过度的CPU和硬盘。

下面开始了(以下说明只针对SqlServer有效):

1、当使用非unicode时慎用以下这种查询:
select f from t where f = N'xx'

原因:无法利用到索引,因为数据库会将f先转换到unicode再和N'xx'比较

2、char 和相同长度的varchar处理速度差不多(后面还有说明)

3、varchar的长度不会影响处理速度!!!(看后面解释)

4、索引中列总长度最多支持总为900字节,所以长度大于900的varchar、char和大于450的nvarchar,nchar将无法创建索引

5、text、ntext上是无法创建索引的

6、O/R Mapping中对应实体的属性类型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性来说,可变长度的类型更加吻合

7、一般基础资料表中的name在实际查询中基本上全部是使用like '%xx%'这种方式,而这种方式是无法利用索引的,所以如果对于此种字段,索引建了也白建

8、其它一些像remark的字段则是根本不需要查询的,所以不需要索引

9、varchar的存放和string是一样原理的,即length {block}这种方式,所以varchar的长度和它实际占用空间是无关的

10、对于固定长度的字段,是需要额外空间来存放NULL标识的,所以如果一个char字段中出现非常多的NULL,那么很不幸,你的占用空间比没有NULL的大(但这个大并不是大太多,因为NULL标识是用bit存放的,可是如果你一行中只有你一个NULL需要标识,那么你就白白浪费1byte空间了,罪过罪过!),这时候,你可以使用特殊标识来存放,如:'NV'

11、同上,所以对于这种NULL查询,索引是无法生效的,假如你使用了NULL标识替代的话,那么恭喜你,你可以利用到索引了

12、char和varchar的比较成本是一样的,现在关键就看它们的索引查找的成本了,因为查找策略都一样,因此应该比较谁占用空间小。在存放相同数量的字符情况下,如果数量小,那么char占用长度是小于varchar的,但如果数量稍大,则varchar完全可能小于char,而且要看实际填充数值的充实度,比如说varchar(3)和char(3),那么理论上应该是char快了,但如果是char(10)和varchar(10),充实度只有30%的情况下,理论上就应该是varchar快了。因为varchar需要额外空间存放块长度,所以只要length(1-fillfactor)大于这个存放空间(好像是2字节),那么它就会比相同长度的char快了。

13、nvarchar比varchar要慢上一些,而且对于非unicode字符它会占用双倍的空间,那么这么一种类型推出来是为什么呢?对,就是为了国际化,对于unicode类型的数据,排序规则对它们是不起作用的,而非unicode字符在处理不同语言的数据时,必须指定排序规则才能正常工作,所以n类型就这么一点好处。


总结:
1、如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char
2、能确定长度又不一定是ansi字符或者,那么用nchar;
3、不确定长度,要查询且希望利用索引的话,用nvarchar类型吧,将它们设到400;
4、不查询的话没什么好说的,用nvarchar(4000)
5、性格豪爽的可以只用3和4,偶尔用用1,毕竟这是一种额外说明,等于告诉别人说,我一定需要长度为X位的数据

 

转:http://hi.baidu.com/eess/blog/item/114a11306bf1e491a8018e34.html

阅读更多
个人分类: 技术收藏
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭