<style type="text/css">
和 Visual Basic .NET 和 C# 这样的编程语言一样,SQL Server 数据库使用不同的数据类型存储数据。SQL Server 2005 大约支持 30 种数据类型,大部分与 .NET 中使用的类似。下表列出了最为常用的 SQL Server 数据类型和描述,以及 .NET 对应的数据类型。
SQL 2005 数据类型 | 描 述 | .NET 数据类型 |
---|---|---|
bit | 以0/1形式存储布尔值 | System.Boolean |
Bigint | 包含固定长度的文本。如果存储的文本短于定义的长度,就用空格填充。nchar 以 Unicode 格式存储数据,允许存储多种外语的数据 | System.String |
datetime | 存储日期和时间 | System.DateTime |
decimal | 允许存储较大的小数 | System.Decimal |
float | 允许存储较大的小数 | System.Double |
image | 允许存储大的二进制对象,如文件。尽管其名称暗示了只可用它存储图象,但事实并非如此。可用它存储任何类型的文档或其他二进制对象 | System.Byte[] |
tinyint | 用于存储0~255的整数 | System.Byte |
smallint | 用于存储-32 768~32 767的整数 | System.Int16 |
Int | 用于存储-2 147 483 648~2 147 483 648的整数 | System.Int32 |
bigint | 用于存储-9 223 372 036 854 775 808~9 223 372 036 854 775 808的较大整数 | System.Int64 |
text/ntext | 用于存储较多的文本 | System.String |
varchar/nvarchar | 用于存储变长的文本。nvarchar 以 Unicode 格式存储数据,这就可以存储多种外语的数据 | System.String |
uniqueidentifier | 存储全局唯一标识符 | System.Guid |
其中的一些数据类型允许指定最大长度。在定义 char、nchar、varchar 或 nvarchar 类型的列时,需要指定字符长度。例如,nvarchar(10) 最多可存储10个字符。从 SQL Server 2005 开始,这些数据类型都允许指定 MAX 为最大尺寸。通过 MAX 说明符,可以在单个列中最多存储 2GB 的数据。对于大段的文本,像评论主体部分,应该考虑用 nvarchar(max) 数据类型。如果清楚某列(像邮政区码或手机号)的最大长度或想显式限制其长度,可以指定这一长度。例如,评论的标题应存储于 nvarchar(200) 的列中,限制最大字符数为 200。
数据类型名称 | 类 别 | 长度(以字节为单位) | 数据特点 |
---|---|---|---|
Bit | 整型 | 1 | 表中的第1个Bit数据类型占1个字节;其余7个位也用作Bit数据类型。允许空格使其占用一个额外字节 |
Bigint | 整型 | 8 | 可处理日常用到的越来越大的数,其取值范围为 -2^63 ~ 2^63 - 1 |
Int | 整型 | 4 | 取值范围为 -2 147 483 648 ~ 2 147 483 647 |
SmallInt | 整型 | 2 | 取值范围为 - 32 768 ~ 32 767 |
TynyInt | 整型 | 1 | 取值范围为 0 ~ 255 |
Decimal/Numeric | 数字型 | 可变 | 固定精度,取值范围为 -10^38 - 1 ~ 10^38 - 1。两者含义相同 |
Money | 货币 | 8 | 货币单位,取值范围为 - 2^63 ~ 2^63,精确到4个小数位。注意货币单位可以是任意货币,不限于美元 |
SmallMoney | 货币 | 4 | 货币单位,取值范围为 - 214 748.3648 ~ + 214 748.3647 |
Float(Real) | 近似小数 | 可变 | 由一参数(如 Float(20))决定其长度与精度。注意参数值表示位数,不是字节数。取值范围为 -1.79E + 308 ~ 1.79E + 308 |
DateTime | 日期/时间 | 8 | 日期与时间,取值范围为1753年1月1日 ~ 9999 年12月31日,精确到0.03秒 |
DateTime2 | 日期/时间 | 可变(6~8) | 新扩展的DateTime典型数据类型。支持更大的日期范围和更高的时间部分精度(精确到 100 纳秒)。和 DateTime 一样,它不包含时区信息,但与.NET DateTime数据类型相对应 |
SmallDateTime | 日期/时间 | 4 | 日期与时间,取值范围为 1900年1月1日 ~ 2079年6月6日,精确到分钟 |
DateTimeOffset | 日期/时间 | 可变(8~10) | 类似于DateTime数据类型,但有一个相对于UTC时间的 -14:00 ~ + 14:00 的偏移量。时间在内部存储为UTC时间,任何比较、排序或索引将基于该统一的时区 |
Date | 日期/时间 | 3 | 只存储Gregorian日历定义的0001年1月1日 ~ 9999年12月31日的日期数据。采取ANSI标准日期格式(YYYY-MM-DD),但会从其他一些格式隐式转换 |
Time | 日期/时间 | 可变(3~5) | 只存储用户可选的精度为纳秒(默认)的时间数据 |
Cursor | 特殊小数 | 1 | 指向游标的指针,只占用一个字节,记住组成实际游标的结果集也占用内存,占用内存的大小取决于结果集 |
Timestamp/rowVersion | 特殊小数(二进制) | 8 | 给定数据库的唯一特定值。即使UPDATE语句没有timestamp列(时间标记),但其值在插入或更新记录的时间自动由数据库设定(不允许直接更新timestamp字段) |
UniqueIdentifier | 特殊小数(二进制) | 16 | 特殊的全局唯一标识符(GUID),必须保证在内存空间和时间内的唯一 |
Char | 字符 | 可变 | 定长字符数据。比设定长度短时使用空格填充,为非Unicode数据,最大长度为8 000字符 |
VarChar | 字符 | 可变 | 长度可变的字符数据。比设定长度短时不使用空格填充,为非Unicode数据。允许最大长度为8 000字符,使用max关键字表示其长度可足够大(数据长度可达2^31字节) |
Text | 字符 | 可变 | 从SQL Server 2005开始支持向后兼容。可使用varchar(max)代替 |
NChar | Unicode | 可变 | 定长Unicode字符数据。比设定长度短时使用空格填充。最大长度为4 000字符 |
NVarChar | Unicode | 可变 | 可变长度的Unicode字符数据。比设定长度短时不使用空格填充。允许最大长度为4 000字符,使用max关键字表示其长度可足够大(数据长度可达2^31字节) |
Ntext | Unicode | 可变 | 可变长度的Unicode字符数据。类似Text数据类型,仅用作向后兼容。可使用nvarchar(max)代替 |
Binary | 二进制 | 可变 | 定长二进制数,最大长度为8 000字节 |
VarBinary | 二进制 | 可变 | 可变二进制数,最大特定长度为8 000字节,可使用max关键字使其作为LOB(大对象)字段(数据长可达2^31字节) |
Image | 二进制 | 可变 | 从SQL Server 2005开始支持向后兼容。可使用varbinary(max)代替 |
Table | 其他 | 特殊 | 主要用于结果集,通常作为用户自定义函数(UDF)的结果输出或作为存储过程的参数。在表的定义中不作为可用的数据类型 |
HierachyID | 其他 | 特殊 | 维护层次结构位置信息的特殊数据类型。提供特定于层次结构需要的特殊功能。允许作深度、父/子关系和索引比较。实际尺寸随层次结构中的节点数和平均深度而变 |
Sql_variant | 其他 | 特殊 | 与VB和C++中的变量基本无关。其实质是用于保存大多数其他SQL Server数据类型的容器。当列或函数需要处理多种数据类型时可使用这种数据类型。与VB不同的是,使用这种数据类型要将其显式转换为更具体的数据类型 |
XML | 字符 | 可变 | 定义一个字符字段用作XML数据。用于针对XML模式的数据验证和使用特殊的面向XML的函数 |
CLR | 其他 | 可变 | 随CLR对象的特性而变,CLR对象支持基于自定义数据类型的CLR |