概述
在 SQL Server 中,每个列、局部变量、表达式和参数都具有一个相关的数据类型。 数据类型是一种属性,用于指定对象可保存的数据的类型:整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等。SQL Server 提供一组系统数据类型,这些类型定义了可以与 SQL Server 配合使用的所有类型的数据。为了方便查询下面把这些数据类型按照不同的类别整理成表格。
精确数字
数据类型 范围 存储 bigint -9,223,372,036,854,775,808(-2^ 63) 到 9,223,372,036,854,775,807(2^ 63-1) 8 字节 int -2,147,483,648(-2^ 31) 到 2,147,483,647(2^31-1) 4 个字节 smallint -32,768 (-2^ 15) 到 32,767(2^15-1) 2 字节 tinyint 0(2^ 0-1) 到 255(2^8-1) 1 字节 bit 0 、1、null 1 字节 money -922,337,203,685,477.5808 到 922,337,203,685,477.5807 8个字节 smallmoney -214,748.3648 到 214,748.3647 4个字节 decimal(p,s) | numeric(p,s) - 10^ 38 +1 到 10^38 - 1 5(1-9 p) | 9(10-19 p) | 13(20-28 p) | 17(29-38 p) 字节(p为精度值即小数点左右两侧数字数量的总数)
近似数字
数据类型 范围 存储 float(n) -1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308 4(1-24 n) | 8 (25-53 n)字节 (n 为用于存储 float 数值尾数的位数,以科学计数法表示) real -3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38 4个字节
日期和时间
数据类型 范围 存储 date 0001-01-01 到 9999-12-31 3个字节 datetime 1753-01-01 00:00:00 到 9999-12-31 23:59:59.997 8个字节 datetime2 0001-01-01 00:00:00 到 9999-12-31 23:59:59.9999999 6(精度小于等于4) | 8(精度5-7) 字节(秒后面的保留位数为精度) smalldatetime 1900-01-01 00:00:00 到 2079-06-06 23:59:59 4个字节 datetimeoffset 0001-01-01 00:00:00 -14:00 到 9999-12-31 23:59:59.9999999 +14:00 10个字节 time 00:00:00.0000000 到 23:59:59.9999999 5个字节
字符串
数据类型 范围 存储 备注 char(n) n定义字符串的大小单位字节,可选值(1-8000) n个字节 固定大小字符串 varchar(n | max) n定义字符串的大小单位字节,可选值(1-8000) ,max指明上限为2^31-1 个字节 n+2个字节 可变大小字符串,超出8000字节使用max否则定义n text 最大2,147,483,647(2^31-1) 个字节 字符串长度 长度可变的非 Unicode 数据
Unicode 字符串
数据类型 范围 存储 备注 nchar(n) n定义字符串大小单位是双字节,可选值(1-4000) n*2个字节 固定大小字符串 nvarchar(n | max) n定义字符串大小单位是双字节,可选值(1-4000),max指明上限为2^31-1 个字节 n*2+2个字节 可变大小字符串,超出4000双字节使用max否则定义n ntext 最大1,073,741,823(2^30 - 1)个字节 字符串长度*2 长度可变的 Unicode 数据
二进制字符串
数据类型 范围 存储 备注 binary(n) n定义二进制数据长度单位字节,可选值(1-8000) n个字节 数据为固定长度 varbinary(n | max) n定义二进制数据长度单位字节,可选值(1-8000) ,max指明上限为2^31-1 个字节 数据的实际长度+2 个字节 数据为可变长度,超出8000字节使用max否则定义n image 0 到 2,147,483,647 (2^31-1)个字节 实际数据的长度 长度可变的二进制数据
其他数据类型
数据类型 描述 备注 cursor 这是变量或存储过程 OUTPUT 参数的一种数据类型,这些参数包含对游标的引用。 对于 CREATE TABLE 语句中的列,不能使用 cursor 数据类型 rowversion 公开数据库中自动生成的唯一二进制数字的数据类型。 rowversion 通常用作给表行加版本戳的机制。 存储大小为 8 个字节。 timestamp 的数据类型为 rowversion 数据类型的同义词,并具有数据类型同义词的行为。 在 DDL 语句中,应尽量使用 rowversion,避免使用 timestamp,SQL Server后续版本将删除timestamp hierarchyid 一种长度可变的系统数据类型。 可使用 hierarchyid的值表示树层次结构中的位置。 编码限制为 892 字节 uniqueidentifier 16 字节 GUID uniqueidentifier 数据类型的列或局部变量可通过使用 NEWID 或 NEWSEQUENTIALID 函数,或通过从 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量进行转换, 初始化为一个值,其中,每个 x 都是 0-9 或 a-f 范围内的十六进制数字。 例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 为有效的 uniqueidentifier 值 。 sql_variant sql_variant 可以用在列、参数、变量和用户定义函数的返回值中 。 借助 sql_variant,这些数据库对象可以支持其他数据类型的值 。sql_variant 的最大长度可以是 8016 个字节 。 类型为 sql_variant 的列可能包含不同数据类型的行 。例如,定义为 sql_variant 的列可以存储 int、binary 和 char 类型的值 。 xml 存储 XML 数据的数据类型。 可在列中或者 xml 类型的变量中存储 xml 实例 。xml 数据类型实例所占据的存储空间大小不能超过 2 GB。 geometry 平面空间数据类型 geometry 在 SQL Server 中作为公共语言运行时 (CLR) 数据类型实现。 此类型表示欧几里得(平面)坐标系中的数据。 geometry 类型已进行预定义,可在每个数据库中使用。 您可以创建 geometry 类型的表列并对 geometry 数据进行操作,就像使用其他 CLR 类型一样。 可以用在持久化和非持久化计算列中。 geography 地理空间数据类型 geography 是作为 SQL Server 中的 .NET 公共语言运行时 (CLR) 数据类型实现的。 此类型表示圆形地球坐标系中的数据。 geography 数据类型存储椭球体(圆形地球)数据 geography 类型已进行预定义,可在每个数据库中使用。 你可以创建 geography 类型的表列并对 geography 数据进行操作,就像使用其他系统提供的数据类型一样。 可以用在持久化和非持久化计算列中。 table 表是一种特殊的数据类型,可用于存储结果集以便进行后续处理。 table 主要用于临时存储一组作为表值函数结果集返回的行。 可将函数和变量声明为 table 类型。 table 变量可用于函数、存储过程和批处理中。 若要声明 table 类型的变量,请使用 DECLARE @local_variable。 如果使用表变量存储的数据大于100行,则使用临时表将是更好的解决方案。
重要
SQL Server的未来版本中将删除ntext 、 text 和 image 这些数据类型。 请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。 请改用 nvarchar(max)、 varchar(max)和 varbinary(max) 。