SQL Server 数据类型介绍

本文介绍 SQL Server 中常见的数据类型,包括整型、小数、字符、日期等,帮助开发者选择合适的数据类型。

发布于

在使用 SQL Server 进行数据库开发时,选择合适的数据类型是设计表结构的第一步。数据类型不仅影响数据的存储方式,还关系到性能、存储空间和数据的准确性。本文将系统地介绍 SQL Server 中常见的数据类型,帮助你理解各类数据在实际开发中的用途,并通过示例加深理解。

整型数据类型(整数类型)

整型数据类型用于存储没有小数部分的数字。SQL Server 提供了多个不同大小的整型类型,以适应不同场景的需求。

数据类型 占用空间 范围
TINYINT 1 字节 0 到 255
SMALLINT 2 字节 -32,768 到 32,767
INT 4 字节 -2,147,483,648 到 2,147,483,647
BIGINT 8 字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

示例

CREATE TABLE Users (
    UserID INT PRIMARY KEY,
    Age TINYINT
);

在这个例子中,UserID 使用 INT 类型,而 Age 使用 TINYINT,因为年龄不太可能超过 255。

小数与精度类型(精确数值)

如果需要存储小数或精确的货币值,可以使用以下几种数据类型:

  • DECIMAL(p, s)NUMERIC(p, s):用于高精度的定点数。p 是总位数,s 是小数位数。
  • MONEYSMALLMONEY:用于货币金额,精度较高。

示例

CREATE TABLE Orders (
    OrderID INT,
    TotalAmount DECIMAL(10, 2)
);

这个表用于存储订单总金额,最多 10 位数字,其中 2 位是小数。

浮点类型(近似数值)

浮点类型适用于科学计算或不需要精确到小数点的情况:

  • FLOAT(n):使用浮点表示法,n 指定精度(1-53)。
  • REAL:等价于 FLOAT(24),精度较低。

示例

CREATE TABLE SensorData (
    SensorID INT,
    Temperature FLOAT
);

这个表适合存储温度等不需要特别精确的数据。

字符类型(文本)

文本数据根据长度可分为定长和变长两类:

  • 定长:CHAR(n),始终占用固定长度。
  • 变长:VARCHAR(n),根据内容长度占用空间。
  • Unicode 支持:NCHAR(n)NVARCHAR(n),支持多语言,推荐使用 NVARCHAR
  • 长文本:TEXT(已废弃,不推荐)和 NTEXT(也已废弃)。

示例

CREATE TABLE Products (
    ProductID INT,
    ProductName NVARCHAR(100)
);

这里使用 NVARCHAR 可以兼容多语言产品名称,如中文、日文等。

日期与时间类型

SQL Server 提供多种类型来存储日期和时间:

数据类型 描述
DATE 仅包含日期(如 2025-06-25)
TIME 仅包含时间(如 14:30:00)
DATETIME 常用的日期时间类型(从 1753 年至 9999 年)
SMALLDATETIME 占用空间小,但精度较低
DATETIME2 精度更高的日期时间类型
DATETIMEOFFSET 包含时区偏移信息

示例

CREATE TABLE Events (
    EventID INT,
    StartTime DATETIME2
);

推荐使用 DATETIME2 替代 DATETIME,因为它支持更高的精度和更广泛的范围。

布尔类型(逻辑值)

SQL Server 并没有 BOOLEAN 类型,但通常使用 BIT 来表示逻辑值:

  • BIT:只能取 0、1 或 NULL,0 通常代表 false,1 代表 true。

示例

CREATE TABLE Tasks (
    TaskID INT,
    IsCompleted BIT
);

这个例子中,IsCompleted 表示任务是否完成。

二进制类型(存储文件、图片等)

  • BINARY(n):定长二进制数据。
  • VARBINARY(n):变长二进制数据。
  • VARBINARY(MAX):最大可以存储 2GB,用于文件或图像。

示例

CREATE TABLE Files (
    FileID INT,
    FileData VARBINARY(MAX)
);

这个表可用于存储上传的文件数据。

其他特殊类型

  • UNIQUEIDENTIFIER:用于存储 GUID,全局唯一标识符。
  • XML:用于存储 XML 文本并支持 XML 查询。
  • GEOGRAPHYGEOMETRY:用于空间数据,如地理坐标。

示例(GUID)

CREATE TABLE Customers (
    CustomerID UNIQUEIDENTIFIER DEFAULT NEWID(),
    Name NVARCHAR(100)
);

总结

选择合适的数据类型,不仅关系到表的结构设计,也影响数据库性能、存储效率和数据的完整性。SQL Server 提供了丰富的数据类型,可以满足各种业务场景。从整数、浮点、小数到文本、日期甚至二进制和空间数据,每一种类型都有它的用武之地。

在设计表结构时,建议遵循以下几个原则:

  • 根据实际数据范围选取最合适的数据类型,避免资源浪费;
  • 对于需要多语言支持的文本,优先使用 NVARCHAR
  • 处理金额使用 DECIMAL 而不是 FLOAT
  • 存储日期和时间时,尽量用 DATETIME2 代替旧的 DATETIME