SQL Server 2008数据类型:Datetime、字符串、自定义及更多(二)

日期: 2008-11-11 作者:SearchSQLServer.com翻译:April 来源:TechTarget中国 英文

Nchar和 Nvarchar数据类型 Nchar和 Nvarchar数据类型与char和varchar数据类型工作原理一样,只是n用于存储统一码。统一码是在你要存储非英语语言字符串时最常用的,这类字符串需要特殊的字符,如希腊字母beta (_)。由于统一码有些复杂,所以每个字节都需要2个字节,因此一个nchar需要两倍长度来存储,nvarchar需要两倍实际字符数加上必须的2个字节。 前面我们已经提到了,现在再来回顾一下SQL Server将表存储在8060字节的页面。

而单个列并不能粘满整个页面,所以简单的数学告诉我们当你使用这些统一码数据类型时,你可达到8000个字节、长度可达4000个字……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Nchar和 Nvarchar数据类型

Nchar和 Nvarchar数据类型与char和varchar数据类型工作原理一样,只是n用于存储统一码。统一码是在你要存储非英语语言字符串时最常用的,这类字符串需要特殊的字符,如希腊字母beta (_)。由于统一码有些复杂,所以每个字节都需要2个字节,因此一个nchar需要两倍长度来存储,nvarchar需要两倍实际字符数加上必须的2个字节。

前面我们已经提到了,现在再来回顾一下SQL Server将表存储在8060字节的页面。而单个列并不能粘满整个页面,所以简单的数学告诉我们当你使用这些统一码数据类型时,你可达到8000个字节、长度可达4000个字节,这在SQL Server 2005中就替换了以前的ntext数据类型。

Binary和Varbinary

Binary and Varbinary Binary和Varbinary函数与char和 varchar一样。唯一的区别就是它们包括binary信息,如文件或者图像。如以前,varbinary(max)就取代了就的图像数据类型。此外,SQL Server 2008允许你指定varbinary(max) 列的文件属性,这样就改变了BLOB存储方式。它保存在磁盘SQL Server的页面上而不是在文件系统上作为独立的文件保存。

Text、Ntext和Image

如之前提到的,text、ntext和image数据类型已经分别由varchar、nvarchar、和varbinary最大长度来代替。但是,如果你现在运行的是老版本或者已经升级到SQL Server 2005或SQL Server 2008,可能你还需要这些数据类型。这种text数据类型包括2GB的字符串数据,ntext包括1GB的统一码字符串数据。Image属于可变长的二进制域,可以包括2GB的任何二进制的数据。当你在使用这些数据类型时,你必须用某些函数来写、升级、读这些列,但是你不能就进行简单的升级。记住这三类数据类型已经被替换了,微软很可能会将它们从以后的SQL Server版本中去掉。

其他数据类型

除了标准的数字和字符串型数据类型时,SQL Server 2008提供了其他几种有用的数据类型。这些类型允许你存储XML数据、全球唯一标识符(GUIDs)、hierarchical identities和空间坐标数据类型。还有一种新的存储数据类型,我们会简短地谈到。

Sql_variant

定义为sql_variant的列,能最大范围地存储任何可以用其他SQL Server数据类型保存的数据。唯一不能保存到sql_variant中的数据就是text、ntext、image、xml、timestamp或最大长度的数据类型。你可以用sql_variant保存各种数据类型到一个表的同一列中。在第4章你会了解到,从建模的角度看这并不是最佳的解决方案。也就是说sql_variant还有一些更好的用途,如当你从其他地方访问一些不太好的数据时创建staging table平台等。存储sql_variant所需的空间由你放入列中的数据类型来决定。

Timestamp

这种数据类型有一些误导名称。实际上timestamp并没有存储有关时间和日期的信息。它是一种二进制的数字、每次都会对包含timestamp列的表自动增加插入或更新操作。Timestamp列的计数器保存整个数据库,每个表都只有timestamp列。这样,你就可以告知你的数据库各种操作的顺序,你还可以实施行版本。

Uniqueidentifier

Uniqueidentifier可能数据类型中最有意思的,也是很多人辩论的主题。基本上,uniqueidentifier列包括GUID,即它是由32个任意字符组成的、有连字符分隔的字符串。例如:以下就是有效的GUID。


45E8F437-670D-4409-93CB-F9424A40D6EE

你用到uniqueidentifier列时,记住以下的一些事情。首先,它们很大、需要16个字节的空间保存。第二,和timestamps或identity列不一样(稍后详见本章的主键部分),在插如数据时,uniqueidentifier并不是自动被赋与了新的GUID。在插入数据时你必须用NEWID函数生成一个新的GUID。你还可以给NEWID()列设定一个默认值。这样你就不需要指定uniqueidentifier列的任何别的东西了,SQL Server会为你插入GUID。

Xml

Xml数据类型不数据本书的范围,但是我们还是会对它作一个简要的介绍。用Xml数据类型时,SQL Server可以在列中包括可扩展的标记语言(XML)。另外,你可以将XML schema绑在列中来约束存储数据。如max数据类型一样,xml数据类型存储空间最大为2GB。

表数据类型可以保存一套可供后来处理的T-SQL语句。该数据保存的方法和保存整个表的方式一样。值得注意的是,表数据类型不能在列中使用,它只能用在T-SQL代码参数中。SQL Server设计不是本书的内容,但是表数据类型在自定义函数中起到了很重要的作用,我们也会简要谈到。

表参数和基表运转方式一样。它们包括一些列,还有检查约束、唯一约束和主键。有了这些基表,表参数就能用于SELECT、INSERT、UPDATE和DELETE语句中。就像其他本地参数一样,表参数存在于调用函数范围内并且在调用模块完成执行时就被清除了。要用这些表参数,你就要将它们和其他参数一样对待并规定一个标准的表定义。

Hierarchyid

Hierarchyid数据类型是系统提供的数据类型,它允许你存储hierarchical数据,如数据库表中的机构数据、项目任务或文件系统。只要你有selfreferencing数据分层格式,hierarchyid可以让你存储和查询数据更加有效。Hierarchyid里的实际数据代表一系列的斜线和指定数值。这种特殊的数据类型只用于非常特殊的实例中。

空间数据类型

SQL Server 2008还介绍有关存储的空间数据类型。首先两种新的数据类型属于几何学范围,他们允许你保存实际位置的平面数据(距离、向量等等)。另外一种数据类型,属于地理学范围,允许你保存有关地球的数据,如经度和纬度等等。虽然你这样太过于简单,这些数据类型就允许你保存能帮你决定位置和航行路线的信息。

自定义数据类型

除了我们描述的数据类型之外,SQL Server还允许你创建自定义数据类型。有了自定义数据类型,你就能够创建你所用的表的标准列。在你定义这些自定义数据类型时,你仍然需要使用标准数据类型作为基础。自定义数据类型就是数据类型的一种固定的定义,还包括长度、精度或刻度。

例如,如果你需要在你的数据库中保存电话号码,你就能创建一个电话号码数据类型。如果你创建的电话号码数据类型是varchar(25),那么你定义的每一个列就是完全相同的,都是varchar(25)。回顾一下在第二章中讨论的一样,自定义数据类型属于在SQL Server中实际执行的域。我们强烈推荐连贯性的自定义数据类型,在最初的开发和后来的增加期间都能对你的数据模块使用。

翻译

April
April

相关推荐