转载:http://www.ezloo.com/2008/10/sql_server_data_type.html
数据类型是数据的一种属性,是数据所表示信息的类型。任何一种语言都有它自己所固有的数据类型,SQL Server提供一下25种固有的数据类型。
SQL Server数据类型一览表
·Binary [(n)]
·Varbinary [(n)]
·Char [(n)]
·Varchar[(n)]
·Nchar[(n)]
·Nvarchar[(n)]
·Datetime
·Smalldatetime
·Decimal[(p[,s])]
·Numeric[(p[,s])]
·Float[(n)]
·Real
·Int
·Smallint
·Tinyint
·Money
·Smallmoney
·Bit
·Cursor
·Sysname
·Timestamp
·Uniqueidentifier
·Text
·Image
·Ntext
1、二进制数据类型:
二进制数据由十六进制数表示,可以使用 binary、varbinary 和 image 数据类型存储。
·binary 固定长度(最多为8K)的二进制数据类型。
binary [ ( n ) ]
固定长度的 n 个字节二进制数据。N 必须从 1 到 8,000。存储空间大小为 n+4 字节。
·varbinary 可变长度(最多为8K)的二进制数据类型。
varbinary [ ( n ) ]
n 个字节变长二进制数据。n 必须从 1 到 8,000。存储空间大小为实际输入数据长度 +4
个字节,而不是 n 个字节。输入的数据长度可能为 0 字节。在 SQL-92 中 varbinary 的
同义词为 binary varying。
·image 用来存储长度超过 8 KB 的可变长度的二进制数据。
除非数据长度超过 8KB,否则一般宜用 varbinary 类型来存储二进制数据。一般用来存放 Microsoft Word 文档、Microsoft Excel 电子表格、包含位图的图像、图形交换格式 (GIF) 文件和联合图像专家组 (JPEG) 文件。
在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。
2、字符数据类型
字符数据由字母、符号和数字组成。使用 char、varchar 和 text 数据类型存储。
·char 固定长度(不超过 8 KB)的字符数据类型。
char[(n)]
长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000
之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。
·varchar 可变长度(不超过 8 KB)的字符数据类型。
varchar[(n)]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000
之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字
符长度可以为零。varchar 在SQL-92 中的同义词为char varying 或character varying。
·text 数据类型的列可用于存储大于 8KB 的 ASCII 字符。
例如,由于 HTML 文档均由 ASCII 字符组成且一般长于 8KB,所以用浏览器查看之前应在 SQL Server 中存储在 text 列中。
3、Unicode数据类型
使用 Unicode 数据类型,列可存储由 Unicode 标准定义的任何字符,包含由不同字符集定义的所有字符。Unicode 数据使用 SQL Server 中的 nchar、varchar 和 ntext 数据类型进行存储。
·nchar 固定长度(至多为 4000 个 Unicode 字符)的Unicode数据类型。
nchar(n)
包含n 个字符的固定长度Unicode字符数据。n的值必须介于1与4,000之间。存储大小为n字
节的两倍。nchar 在 SQL-92 中的同义词为 national char 和 national character。
·nvarchar ( varchar ) 是可变长度 Unicode 数据的数据类型。
nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。
字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar
在 SQL-92 中的同义词为 national char varying 和 national character varying。
·ntext 当列中任意项超过 4000 个 Unicode字符时使用。
4、日期和时间数据类型
日期和时间数据由有效的日期或时间组成。例如,有效日期和时间数据既包括"4/01/98 12:15:00:00:00 PM",也包括"1:28:29:15:01 AM 8/17/98"。在 Microsoft® SQL Server™ 2000 中,日期和时间数据使用 datetime 和 smalldatetime 数据类型存储。
·datetime
数据类型存储从 1753 年 1 月 1 日至 9999 年 12 月 31 日的日期。
每个数值要求 8 个字节的存储空间。
·smalldatetime
数据类型存储从 1900 年 1 月 1 日至 2079 年 6 月 6 日的日期。
每个数值要求 4 个字节的存储空间。
·设置日期
格式的命令如下:
Set DateFormat {format | @format _var|
其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、
YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。
5、数字数据类型
数字数据只包含数字。数字数据包括正数、负数、小数、分数和整数。
·整型数据
整型数据由负整数或正整数组成,如 -15、0、5 和 2509。在 Microsoft® SQL Server™
2000 中,整型数据使用 bigint、int、smallint 和 tinyint 数据类型存储。bigint 数据类
型可存储的数字范围比 int 数据类型广。int 数据类型比 smallint 数据类型的存储范围
大,而 smallint 的数值范围又比 tinyint 类型大。
bigint 存储从-2^63 (-9223372036854775808)到2^63-1(9223372036854775807) 范围内的
数字。存储大小为 8 个字节。
int 存储范围是-2,147,483,648至2,147,483,647(每个值需4个字节的存储空间)。
smallint 存储范围只有 -32,768 至 32,767(每个值需 2 个字节的存储空间)。
tinyint 只能存储 0 至 255 范围内的数字(每个值需 1 个字节的存储空间)。
·小数数据
Decimal 数据包含存储在最小有效数上的数据。在 SQL Server中,小数数据使用 decimal或 numeric 数据类型存储。存储 decimal 或 numeric 数值所需的字节数取决于该数据的数字总数和小数点右边的小数位数。例如,存储数值 19283.29383 比存储 1.1 需要更多的字节。在 SQL Server中,numeric 数据类型等价于 decimal 数据类型。
·近似数字数据
近似数字(浮点)数据包括按二进制计数系统所能提供的最大精度保留的数据。在 SQL Server 中,近似数字数据以 float 和 real 数据类型存储。例如,分数 1/3 表示成小数形式为 0.333333(循环小数),该数字不能以近似小数数据精确表示。因此,从 SQL Server 获取的值可能并不准确代表存储在列中的原始数据。又如以 .3, .6, .7 结尾的浮点数均为数字近似值。
6、货币数据类型
货币数据表示正的或负的货币值。在 Microsoft® SQL Server™ 2000 中使用 money 和smallmoney 数据类型存储货币数据。货币数据存储的精确度为四位小数。
·money 存储范围是 -922,337,203,685,477.5808 至 +922,337,203,685,477.5807
(需 8 个字节的存储空间)。
·smallmoney 存储范围是 -214,748.3648 至 214,748.3647(需 4 个字节的存储空间)。
·如果数值超过了上述范围,则可使用 decimal 数据类型代替。
7、特殊数据类型
特殊数据包括不能用前面所述的二进制、字符、Unicode、日期和时间、数字和货币数据类型表示的数据。
Microsoft® SQL Server™ 2000 包含四种特殊数据类型:
·timestamp
用于表示 SQL Server 在一行上的活动顺序,按二进制格式以递增的数字来表示。当表中的行发生变动时,用从 @@DBTS 函数获得的当前数据库的时间戮值来更新时间戮。timestamp数据与插入或修改数据的日期和时间无关。若要自动记录表中数据更改的时间,使用 datetime或 smalldatetime 数据类型记录事件或触发器。SQL Serve 中 rowversion 是 timestamp 的同义词。
·bit
bit 数据类型只能包括 0 或 1。可以用 bit 数据类型代表 TRUE 或 FALSE、YES 或 NO。例如,询问客户是否为初次访问的问题可存储在 bit 列中。
·uniqueidentifier
以一个 16 位的十六进制数表示全局唯一标识符 (GUID)。当需要在多行中唯一标识某一行时可使用 GUID。例如,可使用 unique_ identifier 数据类型定义一个客户标识代码列,以编辑公司来自多个国家/地区的总的客户名录。
·sql_variant
一种存储 SQL Server 所支持的各种数据类型(text、ntext、timestamp 和 sql_variant除外)值的数据类型。
·table
一种特殊的数据类型,存储供以后处理的结果集。table 数据类型只能用于定义 table 类型的局部变量或用户定义函数的返回值。
·用户定义
允许使用用户定义数据类型,例如,product_code 可设计为基于 char 数据类型的两个大写字母后跟 5 位供应商号码的格式。
--------------------------------------------------------------------------------
-
用户定义的数据类型
用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为 postal_code 的数据类型,它基于 Char 数据类型。
当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。
1、创建用户定义的数据类型
创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下:
sp_addtype {type},[,system_data_bype][,'null_type']
其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char 等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如'NULL'、'NOT NULL'或者'NONULL'。
例子:
Use cust
Exec sp_addtype ssn,'Varchar(11)',"Not Null'
创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。
例子:
Use cust
Exec sp_addtype birthday,datetime,'Null'
创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。
例子:
Use master
Exec sp_addtype telephone,'varchar(24),'Not Null'
Eexc sp_addtype fax,'varchar(24)','Null'
创建两个数据类型,即 telephone 和 fax
2、删除用户定义的数据类型
当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {'type'}。
例子:
Use master
Exec sp_droptype 'ssn'
注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。