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
是小数位数。MONEY
和SMALLMONEY
:用于货币金额,精度较高。
示例:
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 查询。GEOGRAPHY
和GEOMETRY
:用于空间数据,如地理坐标。
示例(GUID):
CREATE TABLE Customers (
CustomerID UNIQUEIDENTIFIER DEFAULT NEWID(),
Name NVARCHAR(100)
);
总结
选择合适的数据类型,不仅关系到表的结构设计,也影响数据库性能、存储效率和数据的完整性。SQL Server 提供了丰富的数据类型,可以满足各种业务场景。从整数、浮点、小数到文本、日期甚至二进制和空间数据,每一种类型都有它的用武之地。
在设计表结构时,建议遵循以下几个原则:
- 根据实际数据范围选取最合适的数据类型,避免资源浪费;
- 对于需要多语言支持的文本,优先使用
NVARCHAR
; - 处理金额使用
DECIMAL
而不是FLOAT
; - 存储日期和时间时,尽量用
DATETIME2
代替旧的DATETIME
。