数据库在建表的时候会选择数据类型,以下数据类型是按照SQL Server2019进行排列的
1.bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
2.binary(50)
Binary(n) 数据类型用来存储可达8000 字节长的定长的二进制数据。当输入内容长度接近时可用。其存储空间的大小是 n + 4 个字节。
3.bit
取值类型只有:0、1、null三种类型。类似于bool值。可以用0,1来表示true,false。
4.char(10)
对英文字符占用1个字节,对一个汉字占用2个字节。不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不够的字符用空格去填。
5.date
Date数据类型只存储日期,不存储时间,仅需要3B的存储空间,默认的数据格式是yyyy-MM-dd,支持的日期范围从0001-01-01到9999-12-31
6.datetime
DateTime数据类型存储日期和时间,其存储空间是固定的8个字节,默认的数据格式是yyyy-MM-dd hh:mm:ss.nnn,表示从1753年1月1日到9999年12月31日的日期和时间数据,精确度为3.33毫秒(0.00333秒),也就是说,DateTime表示的日期范围从公元1753年1月1日00:00:00.000 到9999年12月31日23:59:59.997 ,精确到3.33毫秒。
7.datetime2(7)
DateTime2(n)数据类型存储日期和时间,它是DateTime的升级版本,由于小数秒n的精度可以自主设置,其存储大小(Storage Size)不固定,DateTime2(n)占用的存储空间和小数秒的精度之间的关系是:
DateTime2(n)内部存储的第一个字节存储精度n,后续的字节用于存储值。
当小数秒的精度 n < 3 时,存储空间是1B(精度)+ B(数据);
当小数秒的精度 n 是 3 - 4 时,存储空间是1B(精度)+ 7B(数据);
当小数秒的精度 n 是 5 - 7 时,存储空间是1B(精度)+ 8B(数据),最大的小数秒精度是7,默认值是7;
DateTime2可以表示比DateTime更精确的时间,默认的数据格式是yyyy-MM-dd hh:mm:ss.nnnnnnn,DateTime2 秒默认的精度是7,即用7位小数表示一秒的精度。
8.datetimeoffset(7)
DateTimeOffset(n)数据类型由三部分构成:date、time和 offset(时区偏移),包含了日期、时间和时区数据,其日期和时间使用是本地时间。在本地时间的基础上,使用时区偏移量(offset)来计算UTC时间,因此,DateTimeOffset(n)可以同时表示本地时间和UTC时间,默认的显示文本是:YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm],默认值是1900-01-01 00:00:00 00:00。
DateTimeOffset(n)能够表示的日期、时间和时区范围是:
表示的日期范围是:0001-01-01 到 9999-12-31,
表示的时间范围是:00:00:00 到 23:59:59.9999999,表示的时间精度是100ns,
表示的时区范围是:-14:00 到 +14:00
小数秒的精度会影响变量占用的存储空间的大小:
当小数秒的精度n是 0-2 时,存储大小是8B
当小数秒的精度n是 3-4 时,存储大小是9B
当小数秒的精度n是 5-7 时,存储大小是10B,小数秒的默认精度是7
时区偏移的格式为:[+|-] hh:mm,hh 表示的小时范围是00-14,mm 表示的分钟范围是00-59,把DateTimeOffset时间中的UTC时间 和 时区偏移量 进行算术运算,可以得到本地时间。
9.decimal(18,0)
用来存储小数部分数字,decimal(m,n)的意思是m位数中,有n位是小数,即m-n位整数。
10.float
float 表示近似数值,存在精度损失,数据类型是 float(n),n是可选的,默认类型是float(53),占用8bytes。虽然n的取值范围是1-53,实际上,float 只能表示两种类型float(53) 和 float(24),分别占用 8Bytes 和 4Bytes。
11.geography
空间数据存储,“地理网格分割”,该方案适用于数据类型为 geography 的列。
12.geometry
空间数据存储 ,“几何图形网格分割”,这是适用于 geometry 数据类型的方案。
13.hierarchyid
可以用它来做本地存储并且在树层次结构中管理其位置.只用这个函数能简洁地表示层次结构中的位置.该函数提供的一些内置的函数方法可以操作和遍历层次结构,使得存储和查询分层数据更为容易,而不需要像那样通过CTE递归来获得.
14.image
用来存储图片大小不超过2g的图片,将图片转换为二进制!缺点是占用了很大的数据存储空间。但是现对于之前的存储物理路径来说读取图片和存储图片方便了很多。
15.int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节.
16.money
存储大小为8个字节,小数点前15位,小数点后4位
17.nchar(10)
所有的字符都占用2个字节,不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不够的字符用空格去填。
18.ntext
可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。 ntext中存数据是按双字节存的
19.numeric(18,0)
数字型,长度为18,小数点后0位
20.nvarchar(50)
n 的值必须介于 1 与 4,000 之间。nvarchar是双字节存储,汉字的使用nvarchar
21.nvarchar(MAX)
MAX为4000 = nvarchar(4000)
22.real
表示近似数值,存在精度损失
23.smalldatetime
smalldatetime的有效時間範圍1900/1/1~2079/6/6 存储大小为4个字节
24.smallint
从 -2^15 (-32768) 到 2^15-1 (32767) 的整型数据(所有数字)。存储大小为 2 个字节。
25.smallmoney
存储大小为4个字节,小数点前6位小数点后4位
26.sql_variant
可以存放很多种格式。例如一个sql_variant列既可以存放数字,也可以存放文本。读取时需要进行转化
27.text
服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。
28.time(7)
它允许你只存储一个时间值而没有时间。如果想要存储一个特定的时间信息而不涉及具体的日期时,这将非常的有用。TIME数据类型存储使用24小时制,它并不关心时区,支持高达100纳秒的精确度。TIME数据类型支持从0到7不同的精度
29.timestamp
公开数据库中自动生成的唯一二进制数字的数据类型。timestamp 通常用作给表行加版本戳的机制。 存储大小为 8 个字节。 timestamp 数据类型只是递增的数字,不保留日期或时间。
30.tinyint
从0 到 255 的整型数据(所有数字)。存储大小为 1 个字节。
31.uniqueidentifier
该类型一般用来做为主键使用,可用SQL语法的newid()来生成一个唯一的值。
32.varbinary(50)
可变长度,n 的取值范围为 1 至 8,000,max 是指最大存储空间是 2^31-1 个字节,即最大4GB;
33.varbinary(MAX)
相当于varbinary(8000)
34.varchar(50)
n 的值必须介于 1 与 8,000 之间。按字节存储的,存储一个字母为2个字节,varchar比较节省空间,因为存储大小为字节的实际长度,存储内容都是英文字符而没有汉字等其他语言符号,建议使用varchar
35.varchar(MAX)
相当于varchar(8000)
36.xml
一种称为 XML 的本机数据类型。用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列;此外,还允许带有变量和参数。为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB)。