如果你经常在不同类型数据库做开发或学习时,切换数据库写脚本时,不同数据库的数据类型可能会让你有点“晕”。下面我将对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
用来存储非结构化数据的变长字符串
长度<= 2000字节
long raw
长度<=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'