SQL Server、Oracle、MySQL数据库数据类型整理

1 SQL Server

1.1 精确数字

1.1.1 bigint

范围 − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 2632631​​ 里的所有整数, 8 8 8​​ 个字节,用于储存很大的整数,比如世界总人口数。

1.1.2 int

范围 − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 2312311​​​​ 里的所有整数, 4 4 4​ 个字节,用于储存较大的整数,比如一个城市的人口数。

1.1.3 smallint

范围 − 2 15 ∼ 2 15 − 1 -2^{15}\sim2^{15}-1 2152151​​​​​​ 里的所有整数, 2 2 2 个字节,用于存储一般大小的整数,比如一个学校的学生数。

1.1.4 tinyint

范围 0 ∼ 255 0\sim255 0255​​ 里的所有整数, 1 1 1​ 个字节,用于存储较小的整数,比如一个班级的学生数。

1.1.5 decimal[(p[,s])]和numeric[(p[,s])]

固定精度和小数位数的数值数据类型。使用最大精度时,有效值从 − 1 0 38 + 1 ∼ 1 0 38 − 1 -10^{38}+1\sim10^{38}-1 1038+110381,在 T r a n s a c t − S Q L Transact-SQL TransactSQL 中,两者的功能是等效的,没有任何区别。

p ∈ [ 1 , 38 ] p\in[1,38] p[1,38]​​ 指定了要存储的十进制数字的总数上限,即精度,包括小数点左边和右边的位数,默认为 18 18 18​​。

s ∈ [ 0 , p ] s\in[0,p] s[0,p]​​​​​​​ 指定了小数点右侧存储的十进制数字位数,即小数位数,仅在指定精度后才可以指定小数的位数,默认为 0 0 0​,

字节数 = ⌊ p 9 ⌋ × 4 + 1 \displaystyle=\lfloor\frac p9\rfloor\times4+1 =9p×4+1​ ,常用于存储金额、财务相关的数据。

1.1.6 bit

可以取 0 、 1 、 N U L L 0、1、NULL 01NULL 1 1 1 个字节,常用于表示 TRUEFALSE

1.1.7 money和smallmoney

money 范围 − 922 , 337 , 203 , 685 , 477.5808 ∼ 922 , 337 , 203 , 685 , 477.5807 -922,337,203,685,477.5808\sim922,337,203,685,477.5807 922,337,203,685,477.5808922,337,203,685,477.5807​, 8 8 8​​ 个字节,精度为所表示货币单位的万分之一,常用于表示货币金额。

smallmoney 范围 − 214 , 748.3648 ∼ 214 , 748.3647 -214,748.3648\sim214,748.3647 214,748.3648214,748.3647​, 4 4 4 个字节,精度为所表示货币单位的万分之一,常用于表示货币金额。

用半角句号分隔局部货币单位和总体货币单位,且常在前面加一个货币符号,例如,$$2.15$ 表示 2 2 2 美元 15 15 15 美分。

1.2 近似数字

1.2.1 real

范围 − 3.40 E + 38 ∼ − 1.18 E − 38 、 0 、 1.18 E − 38 ∼ 3.40 E + 38 -3.40E + 38\sim-1.18E - 38、0、1.18E - 38\sim3.40E + 38 3.40E+381.18E3801.18E383.40E+38​​​​​​, 4 4 4​​​​​​ 个字节,精度为 7 7 7​​​ 位数,同义词为 float(24) 常用于存储浮点数,比如各类材料学实验的数据。

1.2.2 float[(n)]

n ∈ [ 1 , 53 ] n\in[1,53] n[1,53]​​​​​ 为用于存储数值的位数,因此可以确定精度和存储大小,默认为 53 53 53​​​​。

范围 − 1.79 E + 308 ∼ − 2.23 E − 308 、 0 、 2.23 E − 308 ∼ 1.79 E + 308 -1.79E + 308\sim-2.23E - 308、0、2.23E - 308\sim1.79E + 308 1.79E+3082.23E30802.23E3081.79E+308​,如果 n ∈ [ 1 , 24 ] n\in[1,24] n[1,24]​ 则用 4 4 4​ 个字节,精度为 7 7 7​ 位数;否则用 8 8 8​ 个字节,精度为 15 15 15​ 位数。常用于存储高精度浮点数,比如天体之间的距离。

1.3 日期与时间

1.3.1 date

范围 0001 − 01 − 01 ∼ 9999 − 12 − 31 0001-01-01\sim9999-12-31 0001010199991231​​​​​ 间的任意日期值,数据格式: Y Y Y Y − M M − D D YYYY-MM-DD YYYYMMDD​​​​​, 3 3 3​​​ ​​个字节。

Y Y Y Y ∈ [ 0001 , 9999 ] YYYY\in[0001,9999] YYYY[0001,9999] 表示年份的四位数字。

M M ∈ [ 01 , 12 ] MM\in[01,12] MM[01,12]​​​​ 表示月份的两位数字。

D D ∈ [ 01 , 31 ] DD\in[01,31] DD[01,31]​​​​​​​​ 表示日期的两位数字(最高值取决于月份),字面意思,常用于表示一个日期。

1.3.2 time

取值范围 00 : 00 : 00.0000000 ∼ 23 : 59 : 59.9999999 00:00:00.0000000\sim23:59:59.9999999 00:00:00.000000023:59:59.9999999​​,数据格式为 h h : m m : s s [ . n n n n n n n ] hh:mm:ss[.nnnnnnn] hh:mm:ss[.nnnnnnn]​​​, 5 5 5​​ 个字节。

h h ∈ [ 0 , 23 ] hh\in[0,23] hh[0,23]​ 表示小时的两位数字。

m m ∈ [ 0 , 59 ] mm\in[0,59] mm[0,59]​​​ 表示分钟的两位数字。

s s ∈ [ 0 , 59 ] ss\in[0,59] ss[0,59]​​​​ 表示秒的两位数字。

n ∗ n^* n​​​​ 是 0 ∼ 7 0\sim7 07​ 位数字,表示秒的小数部分。

精度取决于 n ∗ n^* n​​,time(0) 的精度为 8 8 8​ 位数,其他 time(n) 的精度为 9 + n 9+n 9+n 位数。常用于表示一个时间。

1.3.3 datetime

范围 1753 − 01 − 01   00 : 00 : 00 1753-01-01\ 00:00:00 17530101 00:00:00​​​​​ 到 9999 − 12 − 31   23 : 59 : 59 9999-12-31\ 23:59:59 99991231 23:59:59​​​​,默认值为 1900 − 01 − 01   00 : 00 : 00 1900-01-01 \ 00:00:00 19000101 00:00:00​​​​,占用 8 8 8​​​​​​​ 个字节,常用于存储时间和日期数据。

1.3.4 smalldatetime

范围 1900 − 01 − 01   00 : 00 : 00 1900-01-01\ 00:00:00 19000101 00:00:00​ 到 2079 − 06 − 06   23 : 59 : 59 2079-06-06\ 23:59:59 20790606 23:59:59​,默认值为 1900 − 01 − 01   00 : 00 : 00 1900-01-01 \ 00:00:00 19000101 00:00:00​,占用 4 4 4​ 个字节,常用于存储时间和日期数据。

1.3.5 datetime2

范围 0001 − 01 − 01   00 : 00 : 00 0001-01-01\ 00:00:00 00010101 00:00:00​​ 到 9999 − 12 − 31   23 : 59 : 59 9999-12-31\ 23:59:59 99991231 23:59:59​​,默认值为 1900 − 01 − 01   00 : 00 : 00 1900-01-01 \ 00:00:00 19000101 00:00:00​​,占用 8 8 8​​ 个字节,常用于存储时间和日期数据。

1.3.6 datetimeoffset

用于定义一个采用 24 24 24 小时制与日期相结合并可识别时区的时间,默认格式为 Y Y Y Y − M M − D D   h h : m m : s s [ . n n n n n n n ]   [ { + ∣ − } h h : m m ] YYYY-MM-DD\ hh:mm:ss[.nnnnnnn]\ [\{+\mid-\}hh:mm] YYYYMMDD hh:mm:ss[.nnnnnnn] [{+}hh:mm],占用 10 10 10 个字节。

1.4 字符串

1.4.1 char[(n)]

n ∈ [ 1 , 8000 ] n\in[1,8000] n[1,8000]​​​​​ 为字符串大小,默认为 1 1 1​​​​​,每个 char 占用一个字节的存储空间,常用于存储字符串。

1.4.2 varchar[(n|max)]

n ∈ [ 1 , 8000 ] n\in[1,8000] n[1,8000]​​​​​​​​​ 为字符串大小,可根据实际存储的字符数改变存储空间, m a x max max​​​​​​​​​ 表示最大存储大小,上限是 2 31 − 1 2^{31}-1 2311​​​​​​​​​ 个字节,占用输入数据的实际长度 + 2 +2 +2​​​​​​​​​ 个字节,常用于存储字符串。

1.4.3 text

服务器代码页中长度可变的非 U n i c o d e Unicode Unicode​ 数据,最大长度为 2 31 − 1 2^{31}-1 2311​ 个字符,一个字符占用一个字节,常用于存储文本数据。

1.5 Unicode 字符串

1.5.1 nchar[(n)]

n ∈ [ 1 , 4000 ] n\in[1,4000] n[1,4000]​​​​ 个字符的固定长度 U n i c o d e Unicode Unicode​​​​ 字符数据,默认为 1 1 1​​​​,一个字符占两个字节,可包括全世界的文字,常用于存储各类汉字。

1.5.2 nvarchar[(n|max)]

n ∈ [ 1 , 4000 ] n\in[1,4000] n[1,4000]​​​​​ 为存储 U n i c o d e Unicode Unicode​​​​ 字符数据的最大长度,默认为 1 1 1​​​,可根据实际存储的字符数改变存储空间, m a x max max​​​​ 表示最大存储大小是 2 31 − 1 2^{31}-1 2311​​​​ 个字节,存储大小是输入数据的实际长度的两倍加 2 2 2​​​​​ 个字节,常用于存储很长的一篇中文文章。

1.5.3 ntext

text 差不多,不过长度可变,最大长度为 2 30 − 1 2^{30}-1 2301​ 个字符,一个字符占用两个字节,常用于存储文本数据。

1.6 二进制字符串

1.6.1 binary[(n)]

n ∈ [ 1 , 8000 ] n\in[1,8000] n[1,8000] 为二进制数据的固定长度,占用 n n n 个字节,常用于存储二进制数据。

1.6.2 varbinary[(n)]

n ∈ [ 1 , 8000 ] n\in[1,8000] n[1,8000]​ 为可变长度二进制数据的长度, m a x max max​ 指示最大存储大小是 2 31 − 1 2^{31}-1 2311​ 个字节,占用输入数据的实际长度 + 2 +2 +2​ 个字节,常用于存储二进制数据。

1.6.3 image

范围 0 ∼ 2 31 − 1 0\sim2^{31}-1 02311 个字节,长度可变的二进制数据,常用于存储照片、图片。

2 Oracle

2.1 字符类型

2.1.1 varchar2

一个字符一个字节,最多 4000 4000 4000​ 个字节,常用于储存可变长度字符串。

2.1.2 nvarchar2

一个字符一个字节,最多 2000 2000 2000​​ 个字节,用于存储 U n i c o d e Unicode Unicode​​ 字符集的可变长度字符串。

2.1.3 char

一个字符一个字节,最多 2000 2000 2000 个字节,用于存储定长字符型数据。

2.1.4 nchar

一个字符一个字节,最多 1000 1000 1000 个字节,用于存储 U n i c o d e Unicode Unicode 字符集的定长字符型数据。

2.1.5 long

一个字符一个字节,最多 2 G B 2GB 2GB​​,用来存储很长很长的字符串。

2.2 数字类型

2.2.1 number(p,s)

p p p​​ 是精度,最大为 38 38 38​, s s s​​ 是保留小数位数,占用的字节数 = ⌊ p 2 ⌋ + 1 + [ n u m < 0 ] \displaystyle=\lfloor\frac{p}{2}\rfloor+1+[num<0] =2p+1+[num<0]​ ,可以用来存储定长的整数和小数。

2.2.2 float[(n)]

number 的一个子集, n n n 是精度,最大为 38 38 38,占用的字节数 = ⌊ p 2 ⌋ + 1 + [ n u m < 0 ] \displaystyle=\lfloor\frac{p}{2}\rfloor+1+[num<0] =2p+1+[num<0],可以用来存储整数和小数。

2.3 日期类型

2.3.1 date

精确到秒, 7 7 7 个字节,常用于储存日期和时间。

2.3.2 timestamp

精确到小数秒, 7 7 7 12 12 12 个字节,常用于储存日期和时间。

2.4 其他数据类型

2.4.1 blob

最多存放 4 G B 4GB 4GB​ 二进制数,常用储存二进制数据。

2.4.2 clob

一个字符一个字节,最多存放 4 G B 4GB 4GB,常用于储存字符串数据。

2.4.3 bfile

占用的空间大小和操作系统有关,常用来把非结构化的二进制数据存储在数据库以外的操作系统文件中。

3 My SQL

3.1 数值类型

3.1.1 tinyint

1 1 1​ 个字节,常用于表示很小的整数值。

3.1.2 smallint

2 2 2​​ 个字节,常用于表示较小的整数值。

3.1.3 mediumint

3 3 3​ 个字节,常用于表示一般大小的整数值。

3.1.4 int

4 4 4 个字节,常用于表示较大的整数值。

3.1.5 bigint

8 8 8 个字节,常用于表示很大的整数值。

3.1.6 float

4 4 4​ 个字节,精度 24 24 24 位,常用于表示单精度浮点数。

3.1.7 double

8 8 8 个字节,精度 53 53 53 位,常用于表示双精度浮点数。

3.1.8 decimal(m,d)

max ⁡ ( m , d ) + 2 \max(m,d)+2 max(m,d)+2 个字节,精度依赖于 m m m d d d 的之,常用于表示小数值。

3.2 日期类型

3.2.1 date

3 3 3 个字节,常用于表示日期。

3.2.2 time

3 3 3 个字节,常用于表示时间。

3.2.3 year

1 1 1 个字节,常用于表示年份。

3.2.4 datetime

8 8 8 个字节,常用于表示日期和时间值的混合。

3.2.5 timestamp

4 4 4 个字节,常用于表示时间戳。

3.3 字符串类型

3.3.1 char

0 ∼ 255 0\sim255 0255 个字节,常用于表示定长字符串。

3.3.2 varchar

0 ∼ 65535 0\sim65535 065535 个字节,常用于表示变长字符串。

3.3.3 tinyblob

0 ∼ 255 0\sim255 0255 个字节,常用于表示不超过 255 255 255 个字符的二进制字符串。

3.3.4 tinytext

0 ∼ 255 0\sim255 0255​​ 个字节,常用于表示短文本数据。

3.3.5 blob

0 ∼ 65535 0\sim65535 065535​ 个字节,常用于表示不超过 65535 65535 65535​ 个字符的二进制字符串。

3.3.6 text

0 ∼ 65535 0\sim65535 065535​​ 个字节,常用于表示长文本数据。

3.3.7 mediumblob

0 ∼ 16777215 0\sim16777215 016777215 个字节,常用于表示不超过 16777215 16777215 16777215 个字符的二进制字符串。

3.3.8 mediumtext

0 ∼ 16777215 0\sim16777215 016777215 个字节,常用于表示中等长度文本数据。

3.3.9 longblob

0 ∼ 4294967295 0\sim4294967295 04294967295 个字节,常用于表示不超过 4294967295 4294967295 4294967295 个字符的二进制字符串。

3.3.10 longtext

0 ∼ 4294967295 0\sim4294967295 04294967295​ 个字节,常用于表示极大文本数据。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值