SQL Server 数据类型

2025年3月17日 | 阅读 7 分钟

数据类型确保我们的列或变量在 SQL Server 中可以存储什么类型的数据。当我们创建任何表或变量时,除了每个列的名称之外,还需要指定它将存储的数据类型。例如,在 SQL Server 中,每个表有许多列,并且每个列包含特定的数据类型,例如整数、浮点数、varchar、布尔值等。

如何使用数据类型?

  • 我们需要提前为表的每个列指定数据类型,以确保它可以存储什么类型的数据。数据类型规范还可以防止用户输入任何意外或无效的信息。
  • 当我们为列分配适当的数据类型时,我们可以通过仅分配相关列中数据所需的系统内存量来高效利用内存。

我们可以使用以下特征在 SQL Server 中定义数据类型

  • 它表示的值类型(固定或可变)。
  • 存储空间取决于值,是固定长度还是可变长度。
  • 其存储值是否可以索引。
  • SQL Server 如何比较特定数据类型的值。

为什么要使用数据类型?

我们可以通过一个简单的**注册页面**来创建新的 Google 帐户(仅供参考),以了解数据类型在SQL Server中的重要性。此页面显示以下输入字段:**名字、姓氏、用户名**和**密码**。

SQL Server Data Types

这些字段需要以下数据类型特征

  • 名字和姓氏:这些字段应只要求字母。
  • 用户名:此字段可以接受字母、数字和句点。
  • 密码:此字段必须包含字母、数字和特殊字符。

其他一些例子是

  • 联系电话:此字段必须为数字。
  • 邮政编码:它可以包含字母和数字字段。

SQL Server 根据用户的需求支持广泛的 SQL 标准数据类型。这些数据类型可以分为以下几类

  • 精确数值
  • 近似数值
  • 日期和时间
  • 字符字符串
  • Unicode 字符字符串
  • 二进制字符串
  • 其他数据类型

精确数值数据类型

此数据类型将存储整数、小数和货币等精确数字。它们有自己的下限、上限和内存要求。它们有自己的内存需求,以及下限和上限。使用最低数据类型来节省内存要求也是必要的。**例如**,位数据类型可以用于存储**真 (1)** 或**假 (0)** 值。SQL Server 将此数据类型分为九种类型,如下所示

数据类型描述下限上限存储
bit它是一种整数类型,允许我们存储 0、1 和 NULL 值。011 字节
tinyint它允许我们存储从 0 到 255 的整数。02551 字节
smallint它允许我们存储 -32768 到 32767 之间的整数。-2^15 (-32,768)2^15-1 (32,767)2 字节
int它允许存储 -2,147,483,648 到 2,147,483,647 之间的整数-2^31 (-2,147,483,648)2^31-1 (2,147,483,647)4 字节
bigint它允许存储 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之间的整数-2^63 (-9,223,372,036,854,775,808)到 2^63-1 (9,223,372,036,854,775,807)8 字节
Decimal(p, s)它用于比例和固定精度数字。
p 参数表示可存储的最大总位数(小数点左边和右边)。默认值为 18,但可以在 1 到 38 之间。
s 参数表示小数点右边可存储的最大位数。默认值为 0,但可以在 0 到 p 之间。
?10^38+110^381?15 到 17 字节
Numeric(p, s)它类似于 decimal 数据类型,因为两者是同义词。?10^38+110^38?15 到 17 字节。
smallmoney它允许存储货币值。-214,748.3648214,748.36474 字节
money它允许存储货币值。-922,337,203,685,477.5808922,337,203,685,477.58078 字节

近似数值数据类型

此数据类型用于存储浮点值和实数值。它主要用于科学计算。

数据类型下限上限存储精度
float(n)?1.79E+3081.79E+308取决于 n。
4 或 8 字节
7 位
real?3.40E+383.40E+384 字节15 位

日期和时间数据类型

我们使用这些数据类型来在列中保存时间值,例如日期和时间,包括时间偏移。我们可以将此数据类型分为六种类型,如下表所示

数据类型描述下限上限存储
date它用于在 SQL Server 中存储日期。默认情况下,其格式为 YYYY-MM-DD,其值为 1900-01-01。0001-01-019999-12-313 字节
datetime它用于存储带小数秒的日期和时间。其默认值为 1900-01-01 00:00:00。其精度以 .000、.003 或 .007 秒为增量。建议避免使用此数据类型,而应使用 datetime2。1753-01-019999-12-318 字节
datetime2它指定带小数秒的日期和时间,精度为 100 纳秒。它提供 0 到 7 位精度。默认情况下,其精度为 7,格式为 YYYY-MM-DD hh:mm:ss[.fractional seconds]。0001-01-01 00:00:009999-12-31 23:59:59.99999996 到 8 字节
datetimeoffset它与 datetime2 相同,增加了时区偏移。其时区偏移值介于 -14:00 到 +14:00 之间。0001-01-01 00:00:009999-12-31 23:59:59.999999910 字节
smalldatetime它指定日期以及一天中的时间,精度为 1 分钟。这里时间按 24 小时制计算,秒从零 (:00) 开始,没有小数秒。1900-01-01 00:00:002079-06-06 23:59:594 字节
time它仅指定时间数据,精度为 100 纳秒。它基于 24 小时制,不考虑时区。默认情况下,其格式为 hh:mm:ss[.nnnnnnn]。00:00:00.000000023:59:59.99999993 到 5 字节

字符字符串数据类型

此数据类型允许我们仅定义字符数据类型,其长度可以是固定或可变的。下表说明了 SQL Server 中支持的所有字符字符串数据类型

数据类型描述下限上限存储
char(n)它用于存储固定长度的非 Unicode 字符数据。0 个字符8000 个字符n 字节
varchar(n)它用于存储可变长度的非 Unicode 字符数据。0 个字符8000 个字符n 字节 + 2 字节
varchar(max)它是一种存储可变长度数据的数据类型。建议除非需要,否则避免使用此数据类型,因为它需要巨大的内存存储。0 个字符2^31 个字符n 字节 + 2 字节
text它是一个可变长度的字符串。也建议避免使用此数据类型,因为它将在未来版本中被弃用。0 个字符2,147,483,647 个字符n 字节 + 4 字节

Unicode 字符字符串数据类型

此数据类型允许我们定义以 UTF-16 字符集编码的完整 Unicode 字符集范围。下表说明了 SQL Server 中支持的所有 Unicode 字符字符串数据类型

数据类型描述下限上限存储
nchar 它用于存储固定长度的 Unicode 字符数据。0 个字符4000 个字符n 字节的两倍
nvarchar它用于存储可变长度的 Unicode 字符数据。0 个字符4000 个字符的两倍n 字节 + 2 字节
ntext它用于存储可变长度的 Unicode 字符串数据。建议避免使用此数据类型,因为它将在未来版本中被弃用。0 个字符1,073,741,823 个字符字符串长度的两倍

二进制数据类型

此数据类型允许将固定长度和可变长度的图像、音频和视频文件存储到数据库位置。它以 0 和 1 格式存储信息。下表说明了 SQL Server 中支持的所有二进制字符串数据类型

数据类型描述下限上限存储
binary它用于存储固定长度的二进制字符串。0 字节8000 字节n 字节
varbinary它用于存储可变长度的二进制字符串。0 字节8000 字节实际输入数据长度 + 2 字节
图片它类似于 varbinary 数据类型,最多可存储 2 GB。建议避免使用此数据类型,因为它将在未来版本中被弃用。0 字节2,147,483,647 字节

特殊数据类型

SQL Server 还提供了一些特殊数据类型,可以根据我们的要求使用。下表说明了所有特殊数据类型

数据类型描述
光标它是一种对象数据类型,用于变量和存储过程 OUTPUT 参数,其中包含对游标的引用。此外,它还存储临时表信息。其输出是 sp_cursor_list 和 sp_describe_cursor 的列,它返回游标变量的名称。
rowversion它是一种数据类型,返回数据库中自动生成的唯一二进制数字。它通常用于版本标记表行。其内存存储为 8 字节。它是一个递增的数字,不保留时间和日期。
hierarchyid它是一个可变长度的系统数据类型,表示层次结构中的位置。其值表示树层次结构中的位置。
uniqueidentifier此数据类型表示 16 字节 GUID。它用于将字符串常量转换为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式。其中,x 是十六进制数字 (0-9 和 a-f)。
XML此数据类型用于在 SQL Server 表中存储 XML 数据。其存储限制为 2 GB。
空间几何类型它是一种空间平面数据类型,用于表示平面(欧几里德)坐标系中的数据。
空间地理类型它是一种地理空间数据类型,用于存储椭球(圆地球)数据,例如 GPS 纬度和经度坐标。
sql_variant此数据类型用于存储其他 SQL Server 数据类型的值。
它是一种空间数据类型,用于在表值函数中存储临时结果。此数据用于后续处理。我们可以通过使用 DECLARE @local_variable 语法来使用它。它也可以在函数、存储过程和批处理中使用。

结论

本文简要概述了 SQL Server 中支持的所有数据类型。了解这些数据类型后,我们将能够更好地使用适当的数据类型,以实现更好的存储、查询处理和数据检索。