SQL Server 数据类型及示例

⚡ 智能摘要

SQL Server 数据类型定义了列或变量可以存储的值的类型,例如整数、十进制数、字符、日期或二进制数。选择正确的数据类型可以确保数据的有效性并有效地利用内存。

  • 🔢 精确数值: bigint、int、smallint、tinyint、bit、decimal、numeric、money 和 smallmoney 存储精确的整数和定点数。
  • 〰️ 近似数值: float 和 real 存储近似浮点值,用于科学计算。
  • 📅 日期和时间: datetime、smalldatetime、date、time、datetimeoffset 和 datetime2 存储时间值。
  • 🔤 字符和Unicode: char、varchar 和 text 保存文本;nchar、nvarchar 和 ntext 保存 Unicode 文本。
  • 🖼️ 二进制及其他: binary、varbinary 和 image 存储字节数据;cursor、xml 和 uniqueidentifier 满足特殊需求。
  • 🧠 选择 WiseLY: 将每一列与最小的合适类型相匹配,可以提高存储效率和数据完整性。

SQL Server 数据类型及示例

什么是数据类型?

数据类型 MS SQL Server 数据类型被定义为任何列或变量可以存储的数据类型。它是对象所包含的数据类型,例如整数、字符或字符串。创建任何列或变量时,都需要定义数据类型。 or 变量除了指定名称外,还可以设置它将存储的数据类型。

如何使用 MS SQL 数据类型

您需要预先定义列或变量可以存储的数据类型。确定数据类型还可以防止用户输入任何意外或无效的数据。

您可以通过为变量或列分配适当的数据类型来有效地利用内存,这样只会为该列的数据分配所需的系统内存量。

MS SQL 提供多种基本数据类型 SQL 以满足用户需求,例如日期、二进制数据、图像等。

为什么要使用数据类型?

以一个简单的网站应用程序注册页面为例。该页面包含三个输入字段:名字、姓氏和联系电话。

这里需要注意的是,在实际情况下:

  • “名字/姓氏”将始终按字母顺序排列。
  • “联系人”始终为数字。

下面的示例展示了注册表单中的这些字段。

注册表单示例,将名字和姓氏定义为字符型,将联系方式定义为整数型。

从上图可以看出,将“名字/姓氏”定义为字符,“联系方式”定义为整数是合理的。

显然,在任何应用程序中,所有字段都包含一种或多种类型的数据,例如数字、字母、日期等等。

另请注意,不同的数据类型需要不同的内存。因此,为了更有效地利用内存,最好使用其将要存储的数据类型来定义列或变量。

MS SQL Server 中可用的数据类型

以下是 MS SQL Server 数据类型列表。MS SQL Server 支持以下几类数据类型:

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

下图将 MS SQL Server 数据类型分为以下几类。

图表组ping MS SQL Server 数据类型分为七类

SQL 中的精确数字数据类型

SQL Server 中的精确数值类型有九种子数据类型。每种类型都存储定义范围内的整数或定点数。

数据类型 描述 下限 上限 内存
比金特 它存储给定范围内的整数 −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字节
小灵通 它存储给定范围内的整数 0 255 1字节
它可以取 0、1 或 NULL 值。 0 1 1 字节/8 位列
十进制 用于比例和固定精度数字 −10^38+1 10^38−1 5 到 17 个字节
数字 用于比例和固定精度数字 −10^38+1 10^38−1 5 到 17 个字节
用于货币数据 - 922,337,203,685,477.5808 +922,337,203,685,477.5807 8字节
小钱 用于货币数据 - 214,478.3648 +214,478.3647 4字节

SQL Server 中的精确数值数据类型示例:

查询:

DECLARE @Datatype_Int INT = 2
PRINT @Datatype_Int

输出:

2

语法:

Decimal (P,S)

其中,P 为精度,S 为尺度。

查询:

DECLARE @Datatype_Decimal DECIMAL (3,2) = 2.31
PRINT @Datatype_Decimal

输出:

2.31

SQL 中的近似数值数据类型

SQL近似数值类别包括浮点数和实数。这些数据类型主要用于科学计算。

数据类型 描述 下限 上限 内存 平台精度
浮点数(n) 用于浮点精度数 −1.79E+308 1.79 + 308 取决于 n 的值 15位数
真实 用于浮点精度数 −3.40E+38 3.40 + 38 4字节 7位数

float 类型使用以下语法:

Syntax:  FLOAT [(n)]

这里,n 是用于存储科学计数法表示的浮点数尾数的位数。n 的默认值为 53。

当您定义像 float 这样的数据类型时,n 应该是介于 1 和 53 之间的值。SQL Server 将 n 视为以下两个可能值之一:如果 1<=n<=24,则 n 被视为 24;如果 25<=n<=53,则 n 被视为 53。

查询示例:

DECLARE @Datatype_Float FLOAT(24) = 22.1234
PRINT @Datatype_Float

输出:

22.1234

SQL 中的日期和时间数据类型

此类别存储日期和时间类型的数据。

数据类型 描述 收纳尺寸 准确性 较低范围 上限范围
约会时间 用于指定从 1 年 1753 月 31 日到 9999 年 3.33 月 XNUMX 日的日期和时间。其精度为 XNUMX 毫秒。 8字节 四舍五入为 .000、.003、.007 的增量 1753-01-01 9999-12-31
小日期时间 用于指定 1900 年 1 月 1 日至 2079 年 6 月 6 日之间的日期和时间。精度为 1 分钟。 4字节,固定 1分钟 1900-01-01 2079-06-06
日期 仅用于存储公元 0001 年 1 月 1 日至 9999 年 12 月 31 日之间的日期。 3字节,固定 1 天 0001-01-01 9999-12-31
仅用于存储时间值,精度为 100 纳秒。 5字节 100纳秒 00:00:00.0000000 23:59:59.9999999
日期时间偏移 与 datetime 类似,但有时区偏移。 10字节 100纳秒 0001-01-01 9999-12-31
日期时间2 用于指定从 1 年 0001 月 31 日到 9999 年 XNUMX 月 XNUMX 日的日期和时间 6字节 100纳秒 0001-01-01 9999-12-31

查询示例:

DECLARE @Datatype_Date DATE = '2030-01-01'
PRINT @Datatype_Date

输出:

“2030-01-01”

SQL 中的字符串数据类型

此类别与字符类型相关。它允许您定义固定长度和可变长度的字符数据。它包含四种数据类型。以下是字符串数据类型及其示例。

数据类型 描述 下限 上限 内存
坦克 固定宽度的字符串,最多可存储8,000个字符。 0 个字符 8000 个字符 n 字节
VARCHAR 这是一个长度可变的字符串。 0 个字符 8000 个字符 n 字节 + 2 字节
varchar(最大) 这是一个可变宽度的字符串。它最多可存储 1,073,741,824 个字符。 0 个字符 2^31 个字符 n 字节 + 2 字节
文本 这是一个可变宽度的字符串,最多可存储 2 GB 的文本数据。 0 个字符 2,147,483,647 个字符 n 字节 + 4 字节

查询示例:

DECLARE @Datatype_Char VARCHAR(30) = 'This is Character Datatype'
PRINT @Datatype_Char

输出:

这是字符数据类型

SQL 中的 Unicode 字符串数据类型

该类别存储了所有 Unicode 字符,这些字符使用 UTF-16 字符编码。

数据类型 描述 下限 上限 内存
纳查尔 这是一个固定宽度的Unicode字符串。 0 个字符 4000 个字符 2 乘以 n 字节
无功字符 这是一个可变宽度的Unicode字符串。 0 个字符 4000 个字符 2 乘以 n 字节 + 2 字节
文字 这是一个可变宽度的Unicode字符串。 0 个字符 1,073,741,823 个字符 字符串长度的 2 倍

查询示例:

DECLARE @Datatype_nChar VARCHAR(30) = 'This is nCharacter Datatype'
PRINT @Datatype_nChar

输出:

这是 nCharacter 数据类型

SQL 中的二进制字符串数据类型

此类别包含固定长度和可变长度的二进制字符串。

数据类型 描述 下限 上限 内存
二进制 这是一个固定长度的二进制字符串,最多可存储 8,000 字节。 0字节 8000字节 n 字节
二进制 这是一个可变宽度的二进制字符串,最多可存储 8,000 字节。 0字节 8000字节 实际输入数据的长度+2个字节
图片 这是一个可变宽度的二进制字符串,最大存储容量为 2 GB。 0字节 2,147,483,647字节 -

查询示例:

DECLARE @Datatype_Binary BINARY(2) = 12;
PRINT @Datatype_Binary

输出:

0x000C

SQL 中的其他数据类型

以下是其他 SQL Server 数据类型及其说明:

数据类型 描述
光标 它的输出是 sp_cursor_list 和 sp_describe_cursor 两列,返回游标变量的名称。
行版本 它为表格行添加版本号。
阶层 此数据类型表示层级结构中的位置。
唯一标识符 存储 GUID,通常由字符表达式转换而来。
Sql_variant 它存储 SQL Server 支持的数据类型的值。
XML 它将 XML 数据存储在一列中。
空间几何类型 它在平面坐标系中表示数据。
空间地理类型 它表示地球坐标系中的数据。
它存储结果集以供稍后处理。

有趣的事实!

  • 在检索数据时,CHAR 数据类型比 VARCHAR 数据类型速度更快,因为它的固定宽度避免了长度记录。ping.

常见问题

VARCHAR 使用一个字节存储非 Unicode 字符,而 NVARCHAR 使用两个字节存储 Unicode 字符。当一列需要存储多种语言或不同代码页的符号时,应选择 NVARCHAR;否则,VARCHAR 占用的存储空间更少。

当数值必须非常精确时,例如货币或计量单位,请使用 DECIMAL(或 NUMERIC)类型,因为它存储的是固定精度。对于近似的科学数值,如果允许存在微小的舍入误差,并且较大的数值范围比精确度更重要,则请使用 FLOAT 类型。

是的。在 SQL Server 中,DECIMAL 和 NUMERIC 的功能完全相同。两者都接受精度和小数位数,并存储精确的定点数,因此这两个关键字可以互换使用。您可以根据团队的喜好,选择便于阅读的名称。

CHAR 是一种固定长度类型,它会用空格填充较短的值,因此每个值都使用声明的长度。VARCHAR 是可变长度类型,它只存储输入的字符以及两个字节。CHAR 用于统一代码,VARCHAR 用于长度可变的文本。

是的。 更改表 `ALTER COLUMN column_name new_type` 用于更改表名列的数据类型。只有当现有值能够完全转换为新类型时,更改才会成功;否则会失败,因此请先测试转换并备份数据。

普通的 VARCHAR(n) 最多可存储 8,000 个字符。VARCHAR(max) 最多可存储约 2 GB(2^31-1 字节),适用于超过 8,000 个字符的大型文本。仅当值确实可以达到如此大时才使用 VARCHAR(max)。

是的。 GitHub 副驾驶 可以根据自然语言提示建议列数据类型,并生成 DECLARE 和 CREATE TABLE 语句。在将建议应用于生产环境之前,请务必先根据实际数据确认精度、小数位数、长度和 Unicode 编码要求。

人工智能和机器学习工具会审查样本数据,以推荐合适的数据类型、精度和长度,标记浪费存储空间的过大列,并在迁移过程中检测不匹配项。它们可以加快模式设计速度,同时开发人员可以确认最终选择。

总结一下这篇文章: