zoukankan      html  css  js  c++  java
  • SQL的数据类型

    1. 字符数据类型

    字符数据类型包括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字符之间      n字节

    Nchar(n)     N为1~4000 Unicode字符之间       (2n字节)+2字    节额外开销

    Ntext             最多为230–1                    (1 073 741 823)Unicode字符 每字符2字节

    Nvarchar(max)       最多为230–1                  (1 073 741 823)Unicode字符   2×字符数+2字   节额外开销

    Text                        最多为231–1                       (2 147 483 647)字符    每字符1字节

    Varchar(n)              N为1~8000字符之间             每字符1字节+2     字节额外开销

    Varchar(max)        最多为231–1(2 147 483 647)字符              每字符1字节+2   字节额外开销

    2. 精确数值数据类型

    数值数据类型包括bit、tinyint、smallint、int、bigint、numeric、decimal、money、float以及real。这些数据类型都用于存储不同类型的数字值。第一种数据类型bit只存储0或1,在大多数应用程序中被转换为true或false。bit数据类型非常适合用于开关标记,且它只占据一个字节空间。

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

    3. 近似数值数据类型

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

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

    4. 二进制数据类型

    如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大小的限制。

    5. 日期和时间数据类型

    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之间。

     

    6. 其他系统数据类型

    注意:

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

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

    XML数据存储XML文档或片段。根据文档中使用UTF-16或是UTF-8,它在尺寸上像text或ntext一样存储。XML数据类型使用特殊构造体进行搜索和索引。

    7. CLR集成

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

  • 相关阅读:
    session的工作原理
    jsp与servlet
    java对象的克隆以及深拷贝与浅拷贝
    vi和vim编辑器
    远程登录Linux系统(使用xshell),远程上传加载文件(使用Xftp)
    Linux目录结构(目录结构详解是重点)
    虚拟机CentOS克隆
    虚拟机CentOS创建/使用快照
    VMware Tools安装
    VM配置Centos(第十三步分区设置)
  • 原文地址:https://www.cnblogs.com/9999w/p/3979943.html
Copyright © 2011-2022 走看看