数据类型类别

SQL Server 中的数据类型归纳为下列类别:

在 SQL Server 中,根据其存储特征,某些数据类型被指定为属于下列各组:

  • 大值数据类型:varchar(max)、nvarchar(max) 和 varbinary(max)

  • 大型对象数据类型:text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max) 和 xml

1.精确数字

如decimal和numeric等数值数据类型可存储小数点右边或左边的变长位数。Scale是小数点右边的位数。精度(Precision)定义了总位数,包括小数点右边的位数。例如,由于14.88531可为numeric(7,5)或decimal(7,5)。如果将14.25插入到numeric(5,1)列中,它将被舍入为14.3。

数 据 类 型

描 述

存 储 空 间

注释

bit

0、1或Null的整数数据类型

1字节(8位)

SQL Server 数据库引擎可优化 bit 列的存储。如果表中的列为 8 bit 或更少,则这些列作为 1 个字节存储。如果列为 9 到 16 bit,则这些列作为 2 个字节存储,以此类推。

字符串值 TRUE 和 FALSE 可以转换为以下 bit 值:TRUE 转换为 1,FALSE 转换为 0。

bigint -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) 8 字节

int 数据类型是 SQL Server 中的主要整数数据类型。bigint 数据类型用于整数值可能超过 int 数据类型支持范围的情况。

在数据类型优先次序表中,bigint 介于 smallmoney 和 int 之间。

只有当参数表达式为 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其他整数数据类型(tinyint、smallint 和 int)提升为 bigint。

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字节
tinyint 0 到 255 1字节
decimal[ (p[ ,s] )] 固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 dec 和 dec(p, s)。numeric 在功能上等价于 decimal。p(精度)

最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。

s(小数位数)

小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。

精度 存储字节数

1 - 9

5

10-19

9

20-28

13

29-38

17

 
numeric[ (p[ ,s] )]  
money -922,337,203,685,477.5808 到 922,337,203,685,477.5807 8字节 money 和 smallmoney 数据类型精确到它们所代表的货币单位的万分之一。
smallmoney -214,748.3648 到 214,748.3647 4字节

2.近似数字

用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。

这个分类中包括数据类型float和real。它们用于表示浮点数据。但是,由于它们是近似的,因此不能精确地表示所有值。

float(n)中的n是用于存储该数尾数(mantissa)的位数。SQL Server对此只使用两个值。如果指定位于1~24之间,SQL就使用24。如果指定25~53之间,SQL就使用53。当指定float()时(括号中为空),默认为53。

数 据 类 型

描 述

存 储 空 间

注释

float [ (n) ]

其中 n 为用于存储 float 数值尾数的位数(以科学记数法表示),因此可以确定精度和存储大小。如果指定了 n,则它必须是介于 153 之间的某个值。n 的默认值为 53

-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308

取决于 n 的值

n value

精度

存储大小

1-24

7 位数

4 字节

25-53

15 位数

8 字节

SQL Server 将 n 视为下列两个可能值之一。如果 1<=n<=24,则将 n 视为 24。如果 25<=n<=53,则将 n 视为 53
SQL Server float[(n)]
数据类型从 153 之间的所有 n 值均符合
ISO 标准。double precision 的同义词为 float(53)。
real -3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38 4 字节 real 的
ISO 同义词为 float(24)。

3.日期和时间类型

对于新的工作,请使用 time、date、datetime2 和 datetimeoffset 数据类型。这些类型符合
SQL 标准。它们更易于移植。time、datetime2 和 datetimeoffset 提供更高精度的秒数。datetimeoffset 为全局部署的应用程序提供时区支持。

datetime和smalldatetime数据类型用于存储日期和时间数据。smalldatetime为4字节,存储1900年1月1日~2079年6月6日之间的时间,且只精确到最近的分钟。datetime数据类型为8字节,存储1753年1月1日~9999年12月31日之间的时间,且精确到最近的3.33毫秒。

SQL Server 2008有4种与日期相关的新数据类型:datetime2、dateoffset、date和time。通过SQL Server联机丛书可找到使用这些数据类型的示例。

datetime2数据类型是datetime数据类型的扩展,有着更广的日期范围。时间总是用时、分钟、秒形式来存储。可以定义末尾带有可变参数的datetime2数据类型--如datetime2(3)。这个表达式中的3表示存储时秒的小数精度为3位,或0.999。有效值为0~9之间,默认值为3。

datetimeoffset数据类型和datetime2数据类型一样,带有时区偏移量。该时区偏移量最大为+/-14小时,包含了UTC偏移量,因此可以合理化不同时区捕捉的时间。

date数据类型只存储日期,这是一直需要的一个功能。而time数据类型只存储时间。它也支持time(n)声明,因此可以控制小数秒的粒度。与datetime2和datetimeoffset一样,n可为0~7之间。

数 据 类 型

描 述

存 储 空 间

注释
time 00:00:00.0000000 到 23:59:59.9999999
精确度:100纳秒
字符长度:最小 8 位 (hh:mm:ss),最大 16 位 (hh:mm:ss.nnnnnnn)
3~5字节  
date 0001-01-01 到 9999-12-31
字符长度:10 位
固定3个字节
1、3 字节整数存储日期。
 
smalldatetime 日期范围:1900-01-01 到 2079-06-06
时间范围:00:00:00 到 23:59:59
精确度:1分钟
字符长度:最高 19 位
4字节 2007-5-9 23:59:59 将被舍为 2007-5-10 00:00:00
datetime 日期范围:1753-1-1 到 9999-12-31

时间范围:00:00:00 -23:59:59.997
精确度:0.00333 秒
字符长度:最低 19 位到最高 23 位
8字节  
datetime2 0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999
精确度:100纳秒
6~8字节  
datetimeoffset 日期范围:0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999(以 UTC
 时间表示)
时间范围:00:00:00 到 23:59:59.9999999
精确度:100纳秒
字符长度:最低 26 位 (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) 到最高 34 位 (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)
8~10字节
默认值为 10 个字节的固定大小,默认的秒的小数部分精度为 100ns。
 

4. 字符数据类型

字符数据类型包括varchar、char、nvarchar、nchar、text以及ntext。这些数据类型用于存储字符数据。varchar和char类型的主要区别是数据填充。如果有一表列名为FirstName且数据类型为varchar(20),同时将值Brian存储到该列中,则物理上只存储5个字节。但如果在数据类型为char(20)的列中存储相同的值,将使用全部20个字节。SQL将插入拖尾空格来填满20个字符。

如果要节省空间,那么为什么还使用char数据类型呢?使用varchar数据类型会稍增加一些系统开销。例如,如果要存储两字母形式的州名缩写,则最好使用char(2)列。尽管有些DBA认为应最大可能地节省空间,但一般来说,好的做法是在组织中找到一个合适的阈值,并指定低于该值的采用char数据类型,反之则采用varchar数据类型。通常的原则是,任何小于或等于5个字节的列应存储为char数据类型,而不是varchar数据类型。如果超过这个长度,使用varchar数据类型的好处将超过其额外开销。

nvarchar数据类型和nchar数据类型的工作方式与对等的varchar数据类型和char数据类型相同,但这两种数据类型可以处理国际性的Unicode字符。它们需要一些额外开销。以Unicode形式存储的数据为一个字符占两个字节。如果要将值Brian存储到nvarchar列,它将使用10个字节;而如果将它存储为nchar(20),则需要使用40字节。由于这些额外开销和增加的空间,应该避免使用Unicode列,除非确实有需要使用它们的业务或语言需求。

接下来要提的数据类型是text和ntext。text数据类型用于在数据页内外存储大型字符数据。应尽可能少地使用这两种数据类型,因为可能影响性能但可在单行的列中存储多达2GB的数据。与text数据类型相比,更好的选择是使用varchar(max)类型,因为将获得更好的性能。另外,text和ntext数据类型在SQL Server的一些未来版本中将不可用,因此现在开始还是最好使用varchar(max)和nvarchar(max)而不是text和ntext数据类型。

数 据 类 型

描 述

存 储 空 间

注释

Char(n)

固定长度,

n取值:1~8000

char的ISO同义词:character

n字节

如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果在使用 CAST 和 CONVERT 函数时未指定 n,则默认长度为 30。

将为使用 char 或 varchar 的对象指派数据库的默认排序规则,除非使用 COLLATE 子句指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

如果站点支持多语言,请考虑使用 Unicode nchar 或 nvarchar 数据类型,以最大限度地消除字符转换问题。如果使用 char 或varchar,建议执行以下操作:

  • 如果列数据项的大小一致,则使用 char。

  • 如果列数据项的大小差异相当大,则使用 varchar。

  • 如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。

当执行 CREATE TABLE 或 ALTER TABLE 时,如果 SET ANSI_PADDING 为 OFF,则定义为 NULL 的 char 列将作为 varchar 处理。

Varchar(n|max)
可变长度,

n取值:1~8000
max最大存储大小是:2^31-1 个字节 (2 GB)
varchar的ISO同义词:char
varying或character varying

每字符1字节+2

字节额外开销

text 服务器代码页中长度可变的非Unicode数据,
最大长度: 2^31-1 (2,147,483,647) 个字节
当服务器代码页使用双字节字符时,存储仍是 2,147,483,647 字节。根据字符串,存储大小可能小于 2,147,483,647 字节。  
nchar(n)
固定长度,Unicode字符串数据,
n取值:1~4000
char的ISO同义词:national char或national character
2n(每字符2字节)
n(排序规则代码页使用双字节字符时)

如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

如果列数据项的大小可能相同,请使用 nchar。

如果列数据项的大小可能差异很大,请使用 nvarchar。

sysname 是系统提供的用户定义数据类型,除了不可为空值外,在功能上与 nvarchar(128) 相同。sysname 用于引用数据库对象名。

为使用 nchar 或 nvarchar 的对象分配的是默认的数据库排序规则,但可使用 COLLATE 子句分配特定的排序规则。

SET ANSI_PADDING ON 永远适用于 nchar 和 nvarchar。SET ANSI_PADDING OFF 不适用于 nchar 或 nvarchar 数据类型。

nvarchar(n|max)
可变长度,Unicode字符串数据,
n取值:1~4000
max最大存储为大小是:2^31-1 个字节 (2 GB)
nvarchar的ISO同义词:national char varying、national character varying

2n(每字符2字节)+2字节

ntext

长度可变的 Unicode 数据,字符串最大长度为 2^30 - 1 (1,073,741,823) 个字节。

ntext 的
ISO 同义词为 national text。

存储大小是所输入字符串长度的两倍(以字节为单位)

 

5.二级制类型

如varbinary、binary、varbinary(max)或image等二进制数据类型用于存储二进制数据,如图形文件、Word文档或MP3文件。其值为十六进制的0x0~0xf。image数据类型可在数据页外部存储最多2GB的文件。image数据类型的首选替代数据类型是varbinary(max),可保存最多8KB的二进制数据,其性能通常比image数据类型好。SQL Server 2008的新功能是可以在操作系统文件中通过FileStream存储选项存储varbinary(max)对象。这个选项将数据存储为文件,同时不受varbinary(max)的2GB大小的限制。

数 据 类 型

描 述

存 储 空 间

注释

binary(n)

固定长度,

n取值:1~8000

char的ISO同义词:character

n字节

如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

如果列数据项的大小一致,则使用 binary。

如果列数据项的大小差异相当大,则使用 varbinary。

当列数据条目超出 8,000 字节时,请使用 varbinary(max)。

varbinary(n|max)
可变长度,

n取值:1~8000
max最大存储大小是:2^31-1 个字节 (2 GB)
varbinary 的
ANSI SQL 同义词为 binary varying

存储大小为所输入数据的实际长度 + 2 个字节。所输入数据的长度可以是 0 字节

image 长度可变的二进制数据,从 0 到 2^31-1 (2,147,483,647) 个字节。    

6. 其他系统数据类型

数 据 类 型

描 述

存 储 空 间

注释

Cursor

包含一个对光标的引用和

可以只用作变量或存储过程参数

不适用

 

Hierarchyid

包含一个对层次结构中位置的引用

1~892字节+2

字节的额外开销

 

SQL_Variant

可能包含任何系统数据类

型的值,除了text、ntext、

image、timestamp、xml、

varchar(max)、nvarchar(max)、

varbinary (max)、sql_variant以

及用户定义的数据类型。最大尺

寸为8000字节数据+16字节

(或元数据)

8016字节

 

Table

用于存储用于进一步处理的数
据集。定义类似于Create Table。
主要用于返回表值函数的结果集,
它们也可用于存储过程和批处理中

取决于表定

义和存储的行数

 

Timestamp or

Rowversion

对于每个表来说是唯一的、自

动存储的值。通常用于版本戳,

该值在插入和每次更新时自动改变

8字节

 

Uniqueidentifier

可以包含全局唯一标识符

(Globally Unique Identifier,

GUID)。guid值可以从Newid()

函数获得。这个函数返回的值对

所有计算机来说是唯一的。

尽管存储为16位的二进制值,

但它显示为char(36)

16字节

 

XML

可以以Unicode或非Unicode形式存储

最多2GB

 

注意:

cursor数据类型可能不用于Create Table语句中。

hierarchyid列是SQL Server 2008中新出现的。您可能希望将这种数据类型的列添加到这样的表中--其表行中的数据可用层次结构表示,就像组织层次结构或经理/雇员层次结构一样。存储在该列中的值是行在层次结构中的路径。层次结构中的级别显示为斜杠。斜杠间的值是这个成员在行中的数字级别,如/1/3。可以运用一些与这种数据类型一起使用的特殊函数。

XML数据存储XML文档或片段。根据文档中使用UTF-16或是UTF-8,它在尺寸上像text或ntext一样存储。XML数据类型使用特殊构造体进行搜索和索引。第15章将更详细地介绍这些内容。

7. CLR集成

在SQL Server 2008中,还可使用公共语言运行库(Common Language Runtime,CLR)创建自己的数据类型和存储过程。这让用户可以使用Visual Basic或C#编写更复杂的数据类型,以满足业务需求。这些类型被定义为基本的CLR语言中的类结构。                

SQL SERVER 数据类型详解(SQL Server 2008)的更多相关文章

  1. SQL Server 数据类型详解

    引言 SQL Server是我们日常工作中经常用到的数据库,也是商业系统运用最广泛的数据库之一.如何构建合理.高效.节省空间的数据库?是非常考验程序的基本功底,因为数据库是程序的根基,直接影响着系统效 ...

  2. SQL数据库数据类型详解

    数据类型 类型 描 述 bit 整型 bit 数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或Fa lse .On 或Off int 整 ...

  3. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法

    sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...

  4. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  5. 【SQL Server】SQL触发器经验详解

    [SQL Server]SQL触发器经验详解 | 浏览: 4314 | 更新: 2013-01-07 15:33 25 11 全文阅读分步阅读   加入杂志 步骤 1 2 3 4 5 6 7 8   ...

  6. SQL SERVER分区详解(1-5)

    转自: (五)SQL Server分区自动化案例     (四)SQL Server分区管理     (三)索引分区知识详解     (二)SQL Server分区创建过程     (一)SQL Se ...

  7. zabbix server安装详解

    简介 zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以 ...

  8. SQL Update 语句详解

    SQL Update 语句详解   Update 语句 Update 语句用于修改表中的数据. 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Person: L ...

  9. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

随机推荐

  1. Javascript进阶篇——(JS基础语法)笔记整理

    根据慕课网学习整理到一起的笔记,把东西整理到一起看起来比较方便 什么是变量字面意思:变量是可变的量:编程角度:变量是用于存储某种/某些数值的存储器.我们可以把变量看做一个盒子,盒子用来存放物品,物品可 ...

  2. Repository,UnitOfWork,DbContext(1)

    一.前言 终于到EF了,实在不好意思,最近有点忙,本篇离上一篇发布已经一个多星期了,工作中的小迭代告一段落,终于有点时间来继续我们的架构设计了,在这里先对大家表示歉意. 其实这段时间我并不是把这个系列 ...

  3. iOS基本内存管理:autorelease和autoreleasepool

    1.autorelease 基本用法 对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自 ...

  4. A - 487-3279

    Description Businesses like to have memorable telephone numbers. One way to make a telephone number ...

  5. 单光纤udp通信

    环境:      两块板子,拥有独立系统(Linux),通过单光纤连接(数据只能单向发送,无反馈).两块板子采用udp协议通信. 问题: 发送板子发送数据后,接收板子上的进程收不到数据. 确认两块光纤 ...

  6. (原)STL中vector的疑问

    以前基本上没有用过STL,当然包括里面的vector.今天试验了一下. 主要看了这个网址: http://blog.csdn.net/phoebin/article/details/3864590 代 ...

  7. HttpClient 请求WebApi

    HttpClient client = new HttpClient(); client.BaseAddress = new Uri(ConfigurationManager.AppSettings[ ...

  8. inline 间距

    今天看了内联元素的间距: http://blog.csdn.net/hedong37518585/article/details/6657853

  9. 常用工具类,文件和内存的大小获取,shell脚本的执行

    /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Versi ...

  10. python学习day9

    目录 一.队列 二.生产者消费者模型 三.协程 四.select\poll\epoll 五.paramiko 六.mysql API调用 一.队列(queue) 队列分以下三种: class queu ...