sql server常用数据类型区别

常用的数据类型使用时总是分不清,记个笔记方便以后查阅。

- bigint,int,smallint,tinyint

数据类型 范围 存储
bigint -2^63 (-9,223,372,036,854,775,808) ~ 2^63-1 (9,223,372,036,854,775,807) 8字节
int -2^31 (-2,147,483,648) ~ 2^31-1 (2,147,483,647) 4字节
smallint -2^15 (-32,768) ~ 2^15-1 (32,767) 2字节
tinyint 0~ 255 1字节

在数据类型优先次序表中,bigint 介于 smallmoney 和 int 之间。
只有当参数表达式为 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其他整数数据类型(tinyint、smallint 和 int)提升为 bigint。

- date,time,datetime ,datetime2,dateTimeOffset

数据类型 默认格式 范围 存储
date yyyy-MM-dd 0001-01-01 ~ 9999-12-31 3字节
time hh:mm:ss.nnnnnnn / 5字节
datetime yyyy-MM-dd hh:mm:ss.nnn 1753-01-01 00:00:00.000 ~ 9999-12-31 23:59:59.997 8字节
datetime2 yyyy-MM-dd hh:mm:ss.nnnnnnn / 可变
dateTimeOffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm] 表示的日期范围是:0001-01-01 到 9999-12-31
表示的时间范围是:00:00:00 到 23:59:59.9999999
表示的时间精度是100ns
表示的时区范围是:-14:00 到 +14:00
可变

Date表示一个日子,不包含时间部分。
DateTime包含日期和时间部分,精确到3.33毫秒(0.00333秒)。
DateTime2可以表示比DateTime更精确的时间,默认的数据格式是yyyy-MM-dd hh:mm:ss.nnnnnnn,DateTime2 秒默认的精度是7,即用7位小数表示一秒的精度。
其存储大小(Storage Size)不固定,DateTime2(n)占用的存储空间和小数秒的精度之间的关系是:

  • 当小数秒的精度 n < 3 时,存储空间是6B;

  • 当小数秒的精度 n 是 3 - 4 时,存储空间是7B;

  • 当小数秒的精度 n 是 5 - 7 时,存储空间是8B,最大的小数秒精度是7,默认值是7;

DateTimeOffset小数秒的默认精度是7,小数秒的精度会影响变量占用的存储空间的大小:

  • 当小数秒的精度n是 0-2 时,存储大小是8B

  • 当小数秒的精度n是 3-4 时,存储大小是9B

  • 当小数秒的精度n是 5-7 时,存储大小是10B

datetime占用的存储空间太大,精度不高,datetime2完胜datetime,在产品环境中,推荐使用datetime2,如果对time的要求不是很高,保留2位毫秒,使用datetime2(2),比其他类型节省存储空间。

- char(n),nchar(n),varchar(n),nvarchar(n)

数据类型 默认格式 字符集 n
char(n) 固定长度 ANSI字符,不足的补英文半角空格 0 ~ 8000
nchar(n) 固定长度 Unicode字符,不足的补英文半角空格 0 ~ 4000
varchar(n) 可变长度 ANSI字符,根据数据长度自动变化 0 ~ 8000
nvarchar(n) 可变长度 Unicode字符,根据数据长度自动变化 0 ~ 4000

ANSI主要是以单字节来存储数据,一般适合英文。而我们常用的汉字需要用两个字节来存储,所以就要使用unicode的数据类型,不然读取出来的数据可能会乱码。

- float,real,decimal

float 表示近似数值,存在精度损失,数据类型是 float(n)。

n 精度 存储
1~24 7 4
25-53 15 8

如果1 <= n <= 24,则将n视为24;如果25 <= n <= 53,则将n视为53
近似数值很难确定是否相等,因此,应避免对 float 类型做相等比较,而只限于比较 > 或 < 。

real也表示近似数值,可直接用float表示:real=float(24)。

decimal表示精确数值,不存在精度损失,数据类型decimal(p,s) 需要分别指定小数的最大位数§和小数位的数量(s)。

  • p (precision) :指定小数的最大位数,小数点的左侧和右侧的数字的总数量不能超过p,p的取值范围是从1到38,默认值为18。
  • s (scale):指定在小数点右侧的小数位数,p-s是小数点左边的最大位数。s必须是从0到p的值,只有在指定了精度的情况下才能指定s,s的默认值是0,因此,0 <= s <= p。
精度 (precision) 存储
1~9 5字节
10~19 9字节
20~28 13字节
29~38 17字节

p 和 s 必须遵守规则:0 <= s <= p <= 38,decimal(p,s) 能够表示的有效值是从 - 10^38 +1 到 10^38 - 1。

decimal 数据类型的最大精度为 38,这意味着,decimal 数据类型最多可以存储 38位数字,所有这些数字均可位于小数点后面。decimal 数据类型存储精确的数字表示形式,没有近似值。

你可能感兴趣的:(sql server常用数据类型区别)