SQL-2005系统数据类型
1 、精确数字类型
(1) 精确数字类型包括:
•整数类型;
•Bit (位类型);
•Decimal 和Numeric (数值类型);
•Money 和SmallMoney (货币类型)。
1 、精确数字类型
(2) 整数类型 :
整数类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。整数类型包括以下四类:
(1 )Bigint :Bigint 数据类型可以存储从 (-9223372036854775808) 到(9223372036854775807) 范围之间的所有整型数据。每个Bigint 数据类型值存储在8 个字节中。
(2 )Int (Integer ):Int (或integer )数据类型可以存储从(-2147483648 )到(2147483647 )范围之间的所有正负整数。每个Int 数据类型值存储在4 个字节中。
(3 )Smallint :可以存储从(-32768 )到32767 范围之间的所有正负整数。每个smallint 类型的数据占用2 个字节的存储空间。
(4 )Tinyint :可以存储从0~255 范围之间的所有正整数。每个tinyint 类型的数据占用1 个字节的存储空间。
1 、精确数字类型
(3) 位数据类型
•Bit 称为位数据类型,其数据有两种取值:0 和1 ,长度为1 字节。在输入0 以外的其他值时,系统均把它们当1 看待。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等二值选择。
(4)Decimal 数据类型和 Numeric 数据类型
Decimal 数据类型和Numeric 数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用2~17 个字节来存储-1038+1 到1038-1 之间的固定精度和小数位的数字。也可以将其写为Decimal (p ,s )的形式,p 和s 确定了精确的总位数和小数位。其中p 表示可供存储的值的总位数,默认设置为18 ;s 表示小数点后的位数,默认设置为0 。例如:decimal (10 ,5 ),表示共有10 位数,其中整数5 位,小数5 位。
1 、精确数字类型
(5) 货币数据类型
货币数据类型包括Money 和SmallMoney 两种:
(1 )Money :用于存储货币值,存储在money 数据类型中的数值以一个正数部分和一个小数部分存储在两个4 字节的整型值中,存储范围为(-9223372136854775808 )到(9223372136854775807 ),精确到货币单位的千分之十。
(2 )Smallmoney :与money 数据类型类似,但范围比money 数据类型小,其存储范围为-2147483468 到2147483467 之间,精确到货币单位的千分之十。
当为money 或smallmoney 的表输入数据时,必须在有效位置前面加一个货币单位符号。
2 、近似数字类型
•近似数字类型包括 Real 和 Float 两大类。
( 1 ) Real :可以存储正的或者负的十进制数值,最大可以有 7 位 精确位数。它的存储范围从 -3.40E-38~3.40E+38 。每个 Real 类型 的数据占用 4 个字节的存储空间。
( 2 ) Float :可以精确到第 15 位小数,其范围从 -1.79E- 308~1.79E+308 。如果不指定 Float 数据类型的长度,它占用 8 个 字节的存储空间。 Float 数据类型也可以写为 Float ( n )的形式, n 指定 Float 数据的精度, n 为 1~15 之间的整数值。当 n 取 1~7 时, 实际上是定义了一个 Real 类型的数据,系统用 4 个字节存储它; 当 n 取 8~15 时,系统认为其是 Float 类型,用 8 个字节存储它。
3. 日期和时间数据类型
( 1 ) Datetime :用于存储日期和时间的结合体,它可以存储从公元 1753 年 1 月 1 日零时起 ~ 公元 9999 年 12 月 31 日 23 时 59 分 59 秒之间的所有日期和时间,其 精确度可达三百分之一秒,即 3.33 毫秒。 Datetime 数据类型所占用的存储空间 为 8 个字节,其中前 4 个字节用于存储基于 1900 年 1 月 1 日之前或者之后日期数, 数值分正负,负数存储的数值代表在基数日期之前的日期,正数表示基数日期 之后的日期,时间以子夜后的毫秒存储在后面的 4 个字节中。当存储 Datetime 数据类型时,默认的格式是 MM DD YYYY hh:mm A.M./P.M ,当插入数据或者 在其他地方使用 Datetime 类型时,需要用单引号把它括起来。默认的时间日期 是 January 1,1900 12:00 A.M 。可以接受的输入格式如下: Jan 4 1999 、 JAN 4 1999 、 January 4 1999 、 Jan 1999 4 、 1999 4 Jan 和 1999 Jan 4 。
( 2 ) Smalldatetime :与 Datetime 数据类型类似,但其日期时间范围较小,它 存储从 1900 年 1 月 1 日 ~2079 年 6 月 6 日内的日期。 SmallDatetime 数据类型使用 4 个字节存储数据, SQL Server 2000 用 2 个字节存储日期 1900 年 1 月 1 日以后的 天数,时间以子夜后的分钟数形式存储在另外两个字节中, SmallDatetime 的 精度为 1 分钟。
4. 字符数据类型
•字符数据类型也是 SQL Server 中最常用的数据类型之一,它可以用来存储各种字母、 数字符号和特殊符号。在使用字符数据类型时,需要在其前后加上英文单引号或者双引 号。
( 1 ) Char :其定义形式为 Char ( n ),当用 Char 数据类型存储数据时,每个字符和符 号占用一个字节的存储空间。 n 表示所有字符所占的存储空间, n 的取值为 1~8000 。若 不指定 n 值,系统默认 n 的值为 1 。若输入数据的字符串长度小于 n ,则系统自动在其后添 加空格来填满设定好的空间;若输入的数据过长,将会截掉其超出部分。如果定义了一 个 Char 数据类型,而且允许该列为空,则该字段被当作 Varchar 来处理。
( 2 ) Varchar :其定义形式为 Varchar ( n )。用 Char 数据类型可以存储长达 255 个字 符的可变长度字符串,和 Char 类型不同的是 Varchar 类型的存储空间是根据存储在表的 每一列值的字符数变化的。例如定义 Varchar ( 20 ),则它对应的字段最多可以存储 20 个字符,但是在每一列的长度达到 20 字节之前系统不会在其后添加空格来填满设定好的 空间,因此使用 Varchar 类型可以节省空间。
( 3 ) Text :用于存储文本数据,其容量理论上为 1~231-1 ( 2 , 147 , 483 , 647 )个字 节,但实际应用时要根据硬盘的存储空间而定。
5. Unicode 字符数据类型
•Unicode 字符数据类型包括 Nchar 、 Nvarchar 、 Ntext 三种:
( 1 ) Nchar :其定义形式为 Nchar ( n )。它与 Char 数据类型类似,不同的是 Nchar 数据类型 n 的取值为 1~4000 。 Nchar 数据类型采用 Unicode 标准字符 集, Unicode 标准用两个字节为一个存储单位,其一个存储单位的容纳量就大 大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时 出现中文、英文、法文等,而不会出现编码冲突。
( 2 ) Nvarchar :其定义形式 Nvarchar ( n )。它与 Varchchar 数据类型相 似, Nvarchar 数据类型也采用 Unicode 标准字符集, n 的取值范围为 1~4000 。
( 3 ) Ntext :与 Text 数据类型类似,存储在其中的数据通常是直接能输出到显 示设备上的字符,显示设备可以是显示器、窗口或者打印机。 Ntext 数据类型采 用 Unicode 标准字符集,因此其理论上的容量为 230-1 ( 1 , 073 , 741 , 823 ) 个字节。
6. 二进制字符数据类型
•二进制数据类型包括 Binary 、 Varbinary 、 Image 三种:
( 1 ) Binary :其定义形式为 Binary ( n ),数据的存储长度是固 定的,即 n+4 个字节,当输入的二进制数据长度小于 n 时,余下部 分填充 0 。二进制数据类型的最大长度(即 n 的最大值)为 8000 , 常用于存储图像等数据。
( 2 ) Varbinary :其定义形式为 Varbinary ( n ),数据的存储长 度是变化的,它为实际所输入数据的长度加上 4 字节。其他含义同 Binary 。
( 3 ) Image :用于存储照片、目录图片或者图画,其理论容量为 231-1 ( 2 , 147 , 483 , 647 )个字节。其存储数据的模式与 Text 数据类型相同,通常存储在 Image 字段中的数据不能直接用 Insert 语句直接输入。
7. 其它数据类型
( 1 ) Sql_variant :用于存储除文本、图形数据和 Timestamp 类型数据外的其他任何合法的 SQL Server 数据。此数据类型极大地方便了 SQL Server 的开发工作。
( 2 ) Table :用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个 表,从而使函数或过程返回查询结果更加方便、快捷。
( 3 ) Timestamp :亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改 的相对顺序,相当于一个单调上升的计数器。当它所定义的列在更新或者插入数据行时,此列的值 会被自动更新,一个计数值将自动地添加到此 Timestamp 数据列中。如果建立一个名为 “ Timestamp ” 的列,则该列的类型将自动设为 Timestamp 数据类型。
( 4 ) Uniqueidentifier :用于存储一个 16 字节长的二进制数据类型,它是 SQL Server 根据计算机 网络适配器地址和 CPU 时钟产生的全局惟一标识符代码( Globally Unique Identifier ,简写为 GUID )。此数字可以通过调用 SQL Server 的 newid ()函数获得,在全球各地的计算机经由此函 数产生的数字不会相同。
( 5 ) XML :可以存储 XML 数据的数据类型。利用它可以将 XML 实例存储在字段中或者 XML 类型 的变量中。注意存储在 XML 中的数据不能超过 2GB 。
( 6 ) Cursor :这是变量或存储过程 OUTPUT 参数的一种数据类型,这些参数包含对游标的引 用。使用 Cursor 数据类型创建的变量可以为空。注意:对于 CREATE TABLE 语句中的列,不能 使用 Cursor 数据类型。
用户自定义数据类型
•SQL Server 允许用户自定义数据类型,用户自定义数 据类型是建立在 SQL Server 系统数据类型基础上的,当 用户定义一种数据类型时,需要指定该类型的名称、建 立在其上的系统数据类型以及是否允许为空等。
•SQL Server 为用户提供了两种方法来创建自定义数据 类型:
(1 )使用 SQL Server 管理平台创建用户自定义数据类 型;
( 2 )利用系统存储过程创建用户自定义数据类型
(1 )使用 SQL Server 管理平台创建用户自定义数据类型
(2 )利用系统存储过程创建用户自定义数据类型
•系统存储过程sp_addtype 为用户提供了用T_SQL 语句创建自定义数据类型的途径,其语法形式如下:
sp_addtype [@typename=] type,
[@phystype=] system_data_type
[, [@nulltype=] ‘ null_type ’ ]
[, [@owner=] ‘owner_name’]
(2 )利用系统存储过程创建用户自定义数据类型
•例 5-1 自定义一个地址(address )数据类型。
程序清单如下:
exec sp_addtype address, ‘ varchar (80 )’, ‘not null ’
--------------------------********-----------------------
表说明如下:
数据类型
类型
描 述
bit
整型
bit 数据类型是整型,其值只能是0 、1 或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No 、True 或Fa lse 、On 或Off
int
整型
int 数据类型可以存储从- 231 (-2147483648) 到231 (2147483 647) 之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4 个字节
smallint
整型
smallint 数据类型可以存储从- 215 (-32768) 到215 (32767) 之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间
tinyint
整型
tinyint 数据类型能存储从0 到255 之间的整数。它在你只打算存储有限数目的数值时很有用。 这种数据类型在数据库中占用1 个字节
numeric
精确数值型
numeric 数据类型与decimal 型相同
decimal
精确数值型
decimal 数据类型能用来存储从-1038 +1 到1038 -1 的固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。 范围是小数点左右所能存储的数字的总位数。精度是小数点右边存储的数字的位数
money
货币型
money 数据类型用来表示钱和货币值。这种数据类型能存储从-9220 亿到9220 亿之间的数据,精确到货币单位的万分之一
smallmoney
货币型
smallmoney 数据类型用来表示钱和货币值。这种数据类型能存储从-214748.3648 到214748.3647 之间的数据,精确到货币单位的万分之一
float
近似数值型
float 数据类型是一种近似数值类型,供浮点数使用。说浮点数是近似的,是因为在其范围内不是所有的数都能精确表示。浮点数可以是从-1.79E+308 到1.79E+308 之间的任意数
real
近似数值型
real 数据类型像浮点数一样,是近似数值类型。它可以表示数值在-3.40E+38 到3.40E+38 之间的浮点数
datetime
日期时间型
datetime 数据类型用来表示日期和时间。这种数据类型存储从1753 年1 月1 日到9999 年12 月3 1 日间所有的日期和时间数据, 精确到三百分之一秒或3.33 毫秒
Smalldatetime
日期时间型
smalldatetime 数据类型用来表示从1900 年1 月1 日到2079 年6 月6 日间的日期和时间,精确到一分钟
cursor
特殊数据型
cursor 数据类型是一种特殊的数据类型,它包含一个对游标的引用。这种数据类型用在存储过程中,而且创建表时不能用
timestamp
特殊数据型
timestamp 数据类型是一种特殊的数据类型,用来创建一个数据库范围内的唯一数码。 一个表中只能有一个timestamp 列。每次插入或修改一行时,timestamp 列的值都会改变。尽管它的名字中有“time” , 但timestamp 列不是人们可识别的日期。在一个数据库里,timestamp 值是唯一的
Uniqueidentifier
特殊数据型
Uniqueidentifier 数据类型用来存储一个全局唯一标识符,即GUID 。GUID 确实是全局唯一的。这个数几乎没有机会在另一个系统中被重建。可以使用NEWID 函数或转换一个字符串为唯一标识符来初始化具有唯一标识符的列
char
字符型
char 数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列为此类型时,你必须指定列长。当你总能知道要存储的数据的长度时,此数据类型很有用。例如,当你按邮政编码加4 个字符格式来存储数据时,你知道总要用到10 个字符。此数据类型的列宽最大为8000 个字符
varchar
字符型
varchar 数据类型,同char 类型一样,用来存储非统一编码型字符数据。与char 型不一样,此数据类型为变长。当定义一列为该数据类型时,你要指定该列的最大长度。 它与char 数据类型最大的区别是,存储的长度不是列长,而是数据的长度
text
字符型
text 数据类型用来存储大量的非统一编码型字符数据。这种数据类型最多可以有231 -1 或20 亿个字符
nchar
统一编码字符型
nchar 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符,而不是用单字节( 普通文本中的情况) 。它允许大量的扩展字符。此数据类型能存储4000 种字符,使用的字节空间上增加了一倍
nvarchar
统一编码字符型
nvarchar 数据类型用作变长的统一编码字符型数据。此数据类型能存储4000 种字符,使用的字节空间增加了一倍
ntext
统一编码字符型
ntext 数据类型用来存储大量的统一编码字符型数据。这种数据类型能存储230 -1 或将近10 亿个字符,且使用的字节空间增加了一倍
binary
二进制数据类型
binary 数据类型用来存储可达8000 字节长的定长的二进制数据。当输入表的内容接近相同的长度时,你应该使用这种数据类型
varbinary
二进制数据类型
varbinary 数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容大小可变时,你应该使用这种数据类型
image
二进制数据类型
image 数据类型用来存储变长的二进制数据,最大可达231 -1 或大约20 亿字节