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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

如果你经常在不同类型数据库做开发或学习时,切换数据库写脚本时,不同数据库的数据类型可能会让你有点“晕”。下面我将对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

精确数字类型

5~17字节

类似于decimal

 

 

 

 

smallmoney

精确数字类型

4字节

-214,748.3648 到 214,748.3647

 

 

 

 

 

money

精确数字类型

8字节

-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

近似数字

 

4字节

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

 

 

 

 

 

smalldatetime

时间类型

4字节

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

精度为一分钟

 

 

 

 

datetime

时间类型

8字节

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

Unicode字符串

nvarchar(n)占2*n

nvarchar(max)

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

 

 

 

 

ntext

Unicode字符串

 

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

其它数据类型

8字节

2000好像没有这个数据类型

 

 

 

 

sql variant

其它数据类型

 

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

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

 

 

 

 

uniqueidentifier

其它数据类型

16字节

使用NEWID函数获得

 

 

 

 

table

其它数据类型

 

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

 

 

 

 

xml

其它数据类型

 

 

 

MySQL数据类型

 

数据类型

所属类型

所占字节

范围

SMALLINT

数字类型(整数)

2

-32000——32000

INT

数字类型(整数)

4

-2000000000——2000000000

BIGINT

数字类型(整数)

8

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

FLOAT

数字类型(单精度浮点)

4

单精度浮点数

DOUBLE

数字类型(双节点浮点)

8

双精度浮点数

DECIMAL

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

字节数取决于精度与长度

 

CHAR

字符串

Char(n)与n字节

 

VARCHAR

字符串

Varchar(n)占n+1个字节

 

TEXT

字符串

2+ 实际长度

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

BLOB

二进制字符串

变长 2+实际字符串长度

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

DATE

时间类型

3

存储日期yyyy-mm-dd

TIME

时间类型

3

存储时间或时间间隔

DATETIME

时间类型

8

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

TIMESTAMP

时间类型(时间戳)

4

 

YEAR

时间类型

1

YYYY格式的年份

ENUM

 

1或2

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

SET

 

1—8取决于设置的大小

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

 

ORACLE数据类型

 

数据类型

所属类型

所占字节

范围

CHAR

字符串类型

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

1—2000

VARCHAR2

字符串类型

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

1—4000

NCHAR

字符串类型

 

 

NVARCHAR2

字符串类型

 

 

NUMBER

数字类型

 

 

DATE

 

 

 

LONG

 

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

2GB

RAW

 

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

长度<= 2000字节

LONG RAW

 

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

长度<=2GB

ROWID

伪列

 

 

BLOB

大型对象数据类型

存储二进制数据信息

 

CLOB

大型对象数据类型

只能存储字符数据

 

NCLOB

大型对象数据类型

存储本地语言字符集数据

 

BFILE

大型对象数据类型

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

 

UROWID

 

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

 

FLOAT

 

存储浮点数

 

 

 

 

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

 

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

 

SELECT * FROM SYS.types

 

SELECT NAME, max_length, PRECISION, scale FROM sys.types

 

其中max_length 表示类型的最大长度(以字节为单位)但是imgetextntext的最大长度为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'

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
5月前
|
机器学习/深度学习 存储 关系型数据库
MySQL数据库:常用数据类型
【2月更文挑战第7天】
67 0
|
5月前
|
设计模式 NoSQL Java
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
13天前
|
关系型数据库 MySQL 数据库
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
30 5
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库的数据类型、语法和高级查询
MySQL数据库的数据类型、语法和高级查询
63 0
|
5月前
|
存储 SQL 关系型数据库
MySql中有哪些数据类型(数据库学习——三)
MySql中有哪些数据类型(数据库学习——三)
62 1
|
29天前
|
SQL 安全 Java
探索研究Servlet 数据库访问
【9月更文挑战第28天】
24 0
|
2月前
|
SQL 关系型数据库 数据库连接
探索研究Ruby 数据库访问
【8月更文挑战第31天】
32 1
|
5月前
|
数据库
R语言关联规则Apriori对抗肿瘤中药数据库知识发现研究(下)
R语言关联规则Apriori对抗肿瘤中药数据库知识发现研究(下)
|
2月前
|
存储 数据管理 数据库