天天看点

三大数据库对比研究系列——数据类型

如果你经常在不同类型数据库做开发或学习时,切换数据库写脚本时,不同数据库的数据类型可能会让你有点“晕”。下面我将对oracle、sql server 、mysql三种数据库的数据类型做下例举、比较

sql server数据库暂且以sql server 2005为参考

sql server 数据类型分的比较细: 整数数据、 字符数据、 货币数据、日期和时间数据、二进制字符串等

数据类型

所属类型

所占字节

范围

tinyint

精确数字类型

1字节

0 ~ 255

smallint

2字节

-215(-32768)~215-1(32767)

int

4字节

-231 (-2,147,483,648) 到 231-1 (2,147,483,647)

bigint

8字节

-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)

bit

视情况定(参加msdn)

取值为0、1或null

decimal

5~17字节

固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1

numeric

类似于decimal

smallmoney

-214,748.3648 到 214,748.3647

money

-922,337,203,685,477.5808 到 922,337,203,685,477.5807

float

近似数字

4或8字节取决于float(n)中n的值

-1.79e + 308 至 -2.23e - 308、0 以及 2.23e - 308 至 1.79e + 308

real

-3.40e + 38 至 -1.18e - 38、0 以及 1.18e - 38 至 3.40e + 38

smalldatetime

时间类型

1900 年 1 月 1 日到 2079 年 6 月 6 日

精度为一分钟

datetime

1753 年 1 月 1 日到 9999 年 12 月 31 日

精度为3.33毫秒

char

字符串类型

char(n)跟n有关

固定长度、非unicode字符数据

取值范围为1~8000

varchar

存储大小事输入数据的实际长度加2个字节

取值范围1~8000

max指示最大存储大小是2^31 -1个字节

text

nchar

unicode字符串

nchar(n)占2*n个字节

1—4000

nvarchar

nvarchar(n)占2*n

nvarchar(max)

1—4000 nvarchar(max)指示最大存储大小为2^31 -1字节

ntext

1—2^30 -1 (1073741823)字符,一个字符占两个字节

binary

二进制字符串

binary(n)

1—8000

varbinary

varbinary(n|max)

1—8000 max指示2^31 -1 (2,147,483,647)

image

0—2^31 -1 (2,147,483,647)

cursor

其它数据类型

这是变量或存储过程output参数的一种数据类型

timestamp

2000好像没有这个数据类型

sql variant

一种数据类型,用于存储sql server 2005支持的各种数据类型

(不包括text、ntext、image、timestamp和sql variant)

<a>uniqueidentifier</a>

16字节

使用newid函数获得

table

一种特殊的数据类型,用于存储结果集以进行后续处理。

xml

mysql数据类型

数字类型(整数)

2

-32000——32000

4

-2000000000——2000000000

8

不能用smallint或int描述的超大整数

数字类型(单精度浮点)

单精度浮点数

double

数字类型(双节点浮点)

双精度浮点数

数字类型(用户定义精度的浮点数据)

字节数取决于精度与长度

字符串

char(n)与n字节

varchar(n)占n+1个字节

2+ 实际长度

没有最大长度限制的可变长度的字符串

blob

变长 2+实际字符串长度

存储图片、附件、二进制文件

date

3

存储日期yyyy-mm-dd

time

存储时间或时间间隔

存储包含日期和时间的数据

时间类型(时间戳)

year

1

yyyy格式的年份

enum

1或2

一组数据,用户可以从中选择一个

set

1—8取决于设置的大小

一组数据,用户可从中选择0,1或跟多

oracle数据类型

char(n) n个字节 存储固定长度的子字符串,如果没有明确说明长度,默认长度为1,如果长度不足规定长度,oracle自动用空格填充

1—2000

varchar2

可变长字符串类型。 varchar2(n) n 如果最大长度不是n,不需要空格填充,推荐使用varchar2

nvarchar2

number

数字类型

long

存储最大长度为2gb的变长的变长字符串

2gb

raw

用来存储非结构化数据的变长字符串

长度&lt;= 2000字节

long raw

长度&lt;=2gb

rowid

伪列

大型对象数据类型

存储二进制数据信息

clob

只能存储字符数据

nclob

存储本地语言字符集数据

bfile

存储在oracle数据库以外的文件的指针

urowid

用来存储表示任何类型列地址的二进制字符串

存储浮点数

从上面我们可以看出sql server数据类型的粒度分得最细,当然上面整理的数据类型也未必是最新的,不同版本的数据库对数据类型的支持是不同的(有新的数据类型增加或旧的数据类型删除)。

sql server 2005或以上版本的数据类型你可以通过系统视图查看

select * from sys.types

select name, max_length, precision, scale from sys.types

三大数据库对比研究系列——数据类型

其中max_length 表示类型的最大长度(以字节为单位)但是imge,text,ntext的最大长度为16,有点不明白。个人怀疑是保存的数据的地址()。至于xml为-1就更不明白了。

oracle 10g 的数据类型  dba_types中保存了数据库中所有的抽象数据类型   user_types 表中用户的类型。 

select * from user_types where typecode !='object' and typecode != 'collection'

select * from dba_types where typecode !='object' and typecode != 'collection'