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

oracle 常用数据类型

2011-11-13 16:48 302 查看
1. String Type:
CHAR( <SIZE> <BYTE|CHAR> ): 定长; 字符编码使用default NLS setting; 最多2000bytes
NCHAR( <SIZE> ):定长; 字符编码使用database's national character set;最多2000bytes

VARCHAR2( <SIZE> <BYTE|CHAR> ):变长;字符编码使用default NLS setting;最多4000bytes
NVARCHAR2( <SIZE> ):变长;字符编码使用database's national character set;最多4000bytes

长度:
定长:如果字符没有达到指定的长度,则在后面添加space填满。这会导致很多麻烦,比如判断两个字符串是否相等;而且也可能浪费空间。因此:不要使用定长的!

CHAR和VARCHAR2中:BYTE和CHAR的区别
BYTE指定空间的字节数,CHAR指明字符个数 (注意如在UTF-8zhong,有些字符可以占多个字节)。一般要使用CHAR而不是BYTE。
one very common issue people encounter when using multibyte character sets, namely that a VARCHAR2(N)
doesn’t necessarily hold N characters, but rather N bytes. 
[align=left]
[/align]
[align=left]NCHAR和NVARCHAR2:[/align]
[align=left]长度只使用字符个数。[/align]


字符编码:
[align=left]NLS(National Language Support): [/align]
[align=left]在oracle中可以设置。[/align]
[align=left]
[/align]
[align=left]database's national character set:(Unicode)[/align]
[align=left]In Oracle9i and above, the database’s national character set may take one of two values: UTF8 or [/align]
[align=left]AL16UTF16 (UTF-16 in 9i; AL16UTF16 in 10g). This makes the NCHAR and NVARCHAR types suitable for storing[/align]
[align=left]only multibyte data, which[/align]

小心字符编码间的转换!有可能会丢失信息。

2. Binary Data:
[align=left]RAW( <size> ):变长。长度单位是byte。最大为2000bytes。[/align]
[align=left]
[/align]
[align=left]字符和Raw间的转换函数:[/align]

• HEXTORAW:
To convert strings of hexadecimal characters to the RAW type
• RAWTOHEX:
To convert RAW strings to hexadecimal strings
[align=left]
[/align]
[align=left]3. Number:[/align]

[align=left]NUMBER( p, s ):[/align]

[align=left]p: Precision, or the total number of digits  [/align]
[align=left]s: Scale, or the number of digits to the right of the decimal point[/align]

范围:   1   <=   p   <=38,   -84   <=   s   <=   127

保存数据范围:-1.0e-130   <=   number   value   <   1.0e+126        

保存在机器内部的范围:   1   ~   22   bytes
[align=left]
[/align]
[align=left]s >0时:精确到小数点后面s位。然后检查:小数点前面的有效位(从左边非0位开始数)+ s  <= p[/align]
s == 0  时:表示整数。检查有效位 <= p     
[align=left]s < 0时:精确到小数点前面s位。检查:有效位 + s <= p (即左边因为s产生的0不算在p之类)[/align]
[align=left][/align]

[align=left]BINARY_FLOAT:  空间占32bit       6-7位有效数字         -3.4E-38     到     3.4E38  [/align]
[align=left]BINARY_DOUBLE: 空间占64bit     15~16位有效数字     -1.7E-308   到     1.7E308[/align]
[align=left]对应IEEE中单精度和双精度浮点数。Oracle10g才加入。[/align]
[align=left]
[/align]
[align=left]对比:[/align]
精度:Number比这float和double的精度都高多了,Number是38位。在对精度要求很高的应用中(如financial
application),千万不用使用这两个,而是使用Number类型。
[align=left]数的表示范围:Number比float大,比double小。[/align]
[align=left]速度:Float和Double有硬件直接支持,而Number需要用软件实现,因此Number速度慢很多。(可以用Number来存储数据,然后运算时先用CAST函数转换成float或double)[/align]
[align=left]
[/align]
[align=left]4. 日期:[/align]
[align=left]DATE: [/align]
The DATE type is a fixed-width 7-byte date/time
datatype. It will always contain the seven attributes of
[align=left]the century, the year within the century, the month, the day of the month, the hour, the minute, and the[/align]
[align=left]second.[/align]
[align=left]
[/align]

[align=left]TIMESTAMP(n):支持fractional second[/align]

[align=left]fixed-width 7- or 11-byte date/time datatype[/align]

[align=left]n可选,n可取0~9,表示秒后面的小数点位数[/align]
[align=left]
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息