阅读目录
一: 系统数据类型
2. 浮点数据类型
3. 字符数据类型
4. 日期和时间数据类型
5. 文本和图形数据类型
6. 货币数据类型
7. 位数据类型
8. 二进制数据类型
9. 其他数据类型
二: 自定义数据类型
数据类型是一种属性, 用于指定对象可保存的数据的类型, SQL Server 中支持多种数据类型, 包括字符类型, 数值类型以及日期类型等. 数据类型相当于一个容器, 容器的大小决定了装的东西的多少, 将数据分为不同的类型可以节省磁盘空间和资源.
Sql Server 还能自动限制每个数据类型的取值范围, 例如定义了一个类型为 int 的字段, 如果插入数据时插入的值的大小在 smallint 或者 tinyint 范围之内, Sql Server 会自动将类型转换为 smallint 或者 tinyint, 这样一来, 在存储数据时, 占用的存储空间只有 int 的 1/2 或则 1/4.
Sql Server 数据库管理系统中的数据类型可以分为两类, 分别是: 系统默认的数据类型和用户自定义的数据类型. 下面分别介绍这两大类数据类型的内容.
回到顶部
一: 系统数据类型
Sql Server 提供的系统数据类型有一下几大类, 共 25 种. Sql Server 会自动限制每个系统数据类型的取值范围, 当插入数据库中的值 超过了数据允许的范围时, Sql Server 就会报错.
1. 整数数据类型
整数数据类型是常用的数据类型之一, 主要用于存储数值, 可以直接进行数据运算而不必使用函数转换.
(1).bigint
每个 bigint 存储在 8 个字节中, 其中一个二进制位表示符号位, 其它 63 个二进制位表示长度和大小, 可以表示 - 2 的 63 次方~ 2 的 63 次方 - 1 范围内的所有整数.
(2).int
int 或者 integer, 每个 int 存储在 4 个字节中, 其中一个二进制位表示符号位, 其它 31 个二进制位表示长度和大小,, 可以表示 - 2 的 31 次方~ 2 的 31 次方 - 1 范围内的所有整数.
(3).smallint
每个 smallint 类型的数据占用了两个字节的存储空间, 其中一个二进制位表示整数值的正负号, 其它 15 个二进制位表示长度和大小,, 可以表示 - 2 的 15 次方~ 2 的 15 次方 - 1 范围内的所有整数.
(4).tinyint
每个 tinyint 类型的数据占用了一个字节的存储空间, 可以表示 0~255 范围内的所有整数.
回到顶部
2. 浮点数据类型
浮点数据类型存储十进制小数, 用于表示浮点数值数据的大致数值数据类型. 浮点数据为近似值; 浮点数值的数据则 Sql Server 中采用了只入不舍的方式进行存储, 即当且仅当要舍入的数是一个非零数时, 对其保留数字部分的最低有效位上加 1, 并进行必要的近位.
(1).real
可以存储正的或者负的十进制数值, 它的存储范围从 - 3.40E+38~-1.18E-38,0 以及 1.18E-38~3.40E+38. 每个 real 类型的数据占用 4 个字节的存储空间.
(2)float[(n)]
其中为用于存储 float 数值尾数的位数 (以科学计数法表示), 因此可以确定精度和存储大小. 如果指定了 n 它必须是介于 1 和 53 之间的某个值. n 的默认值为 53.
其范围从 - 1.79E+308~-2.23E-308,0 以及 2.23E+308~1.79E-308. 如果不指定数据类型 float 的长度, 它占用 8 个字节的存储空间. float 数据类型可以写成 float(n) 的形式, n 为指定 float 数据的精度, n 为 1~53 之间的整数值. 当 n 取 1~24 时, 实际上定义了一个 real 类型的数据, 系统用 4 个自己存储它. 当 n 取 25~53 时, 系统认为其是 float 类型, 用 8 个字节存储它.
(3).decimal[(p[,s])] 和 numeric[(p[,s])
带固定精度和小数位数的数值数据类型. 使用最大精度时, 有效值从 - 10^38+1~10^38-1.numeric 在功能上等价于 decimal.
p(精度) 指定了最多可以存储十进制数字的总位数, 包括小数点左边和右边的位数, 该精度必须是从 1 到最大精度 38 之间的值, 默认精度为 18.
s(小数位数) 指定小数点右边可以存储的十进制数字的最大位数, 小数位数必须是从 0 到 p 之间的值, 仅在指定精度后才可以指定小数的位数. 默认小数位数是 0; 因此, 0<=s<=p. 最大存储大小基于精度而变化. 例如: decimal(10,5) 表示共有 10 位数, 其中整数 5 位, 小数 5 位.
回到顶部
3. 字符数据类型
字符数据类也是 Sql Server 中最常用的数据类型之一, 用来存储各种字符, 数字符号和特殊符号. 在使用字符数据类型时, 需要在其前后加上英文单引号或者双引号.
(1)char(n)
当用 char 数据类型存储数据时, 每个字符和符号占用一个字节存储空间, n 表示所有字符所占的存储空间, n 的取值为 1~8000. 如不指定 n 的值, 系统默认 n 的值为 1. 若输入数据的字符串长度小于 n, 则系统自动在其后添加空格来填满设定好的空间; 若输入的数据过长, 则会截掉其超出部分.
(2). varhcar(n|max)
n 为存储字符的最大长度, 其取值范围是 1~8000, 但可根据实际存储的字符数改变存储空间, max 表示最大存储大小是 2 的 31 次方 - 1 个字节. 存储大小是输入数据的实际长度加 2 个字节. 所输入数据的长度可以为 0 个字符. 如 varchcar(20), 则对应的变量最多只能存储 20 个字符, 不够 20 个字符的按实际存储.
(3).nchar(n)
n 个字符的固定长度 Unicode 字符数据. n 值必须在 1~4000 之间 (含), 如果没有数据定义的或变量声明语句中指定 n, 默认长度为 1. 此数据类型采用 Unicode 字符集, 因此每一个存储单位占两个字节, 可将全世界文字囊括在内 (当然除了部分生僻字).
(4)nvarchar(n|max)
与 varchar 类似, 存储可变长度 Unicode 字符数据. n 值必须在 1~4000 之间 (含), 如果没有数据定义的或变量声明语句中指定 n, 默认长度为 1.max 指最大存储大小为 2 的 31 次方 - 1 字节. 存储大小是输入字符个数的两倍 + 2 个字节. 所输入的数据长度可以为 0 个字符.
回到顶部
4. 日期和时间数据类型
(1).date
存储用字符串表示的日期数据, 可以表示 0001-01-01~9999-12-31(公元元年 1 月 1 日到公元 9999 年 12 月 31 日) 间的任意日期值. 数据格式为 "YYYY-MM-DD":
YYYY: 表示年份的四位数字, 范围为 0001~9999;
MM: 表示指定年份中月份的两位数字, 范围为 01~12;
DD: 表示指定月份中某一天的两位数字, 范围为 01~31(最高值取决于具体月份)
该数据类型占用 3 个字节的空间.
(2).time
以字符串形式记录一天的某个时间, 取值范围为 00:00:00.0000000~23:59:59.9999999, 数据格式为 "hh:mm:ss[.nnnnnnn]":
hh: 表示小时的两位数字, 范围为 0~23.
mm: 表示分钟的两位数字, 范围为 0~59.
ss: 表示秒的两位数字, 范围为 0~59.
n * 是 0~7 为数字, 范围为 0~9999999, 它表示秒的小部分.
time 值在存储时占用 5 个字节的空间.
(3).datetime
用于存储时间和日期数据, 从 1753 年 1 月 1 日到 9999 年 12 月 31 日, 默认值为 1900-01-01 00:00:00, 当插入数据或在其它地方使用时, 需用单引号或双引号括起来. 可以使用 "/","-" 和 "." 作为分隔符. 该类型数据占用 8 个字节的空间.
(4).datetime2
datetime 的扩展类型, 其数据范围更大, 默认的最小精度最高, 并具有可选的用户定义的精度. 默认格式为: YYYY-MM-DD hh:mm:ss[.fractional seconds], 日期的存取范围是 0001-01-01~9999-12-31(公元元年 1 月 1 日到公元 9999 年 12 月 31 日).
(5).smalldatetime
smalldatetime 类型与 datetime 类型相似, 只是其存储范围是从 1900 年 1 月 1 日到 2079 年 6 月 6 日, 当日期时间精度较小时, 刻印使用 smalldatetime, 该类型数据占用 4 个字节的存储空间.
(6).datetimeoffset
用于定义一个采用 24 小时制与日期相组合并可识别时区的时间. 默认格式是:"YYYY-MM-DD hh:mm:ss[.nnnnnnn][{+|-}hh:mm]":
hh: 两位数, 范围是 - 14~14
mm: 两位数, 范围为 00~59;
这里 hh 是时区偏移量, 该类型数据中保存的是世界标准时间 (UTC) 值, eg: 要存储北京时间 2011 年 11 月 11 日 12 点整, 存储时该值将是 2011-11-11 12:00:00+08:00, 因为北京处于东八区, 比 UTC 早 8 个小时. 存储该数据类型数据时默认占用 10 个字节大小的固定存储空间.
回到顶部
5. 文本和图形数据类型
(1).text
用于存储文本数据, 服务器代码页中长度可变的非 Unicode 数据, 最大长度为 2 的 31 次方 - 1(2147 483 647) 个字符. 当服务器代码页使用双字节字符时, 存储仍是 2147 483 647 字节.
(2)ntext
与 text 类型作用相同, 为长度可变的非 Unicode 数据, 最大长度为 2 的 30 次方 - 1(1073 741 283) 个字符. 存储大小是所输入字符个数的两倍 (以字节为单位).
(3).image
长度可变的二进制数据, 范围为: 0~2 的 31 次方 - 1 个字节. 用于存储照片, 目录图片或者图画, 容量也是 2147 483 647 个字节, 由系统根据数据的长度自动分配空间, 存储该字段的数据一般不能使用 insert 语句直接输入.
回到顶部
6. 货币数据类型
(1).money
用于存储货币值, 取值范围为正负 922 337 213 685 477.580 8 之间. money 数据类型中整数部分包含 19 个数字, 小数部分包含 4 个数字, 因此 money 数据类型的精度是 19, 存储时占用 8 个字节的存储空间.
(2).smallmoney
与 money 类型相似, 取值范围为 214 748.346 8 之间, smallmoney 存储时占用 4 个字节存储空间. 输入数据时在前面加上一个货币符号, 如人民币为或其它定义的货币符号.
回到顶部
7. 位数据类型
bit 称为位数据类型, 只取 0 或 1 为值, 长度 1 字节. bit 值经常当作逻辑值用于判断 true(1) 或 false(0), 输入非 0 值时系统将其替换为 1.
回到顶部
8. 二进制数据类型
(1)binary(n)
长度为 n 个字节的固定长度二进制数据, 其中 n 是从 1~8000 的值. 存储大小为 n 个字节. 在输入 binary 值时, 必须在前面带 0x, 可以使用 0xAA5 代表 AA5, 如果输入数据长度大于定于的长度, 超出的部分会被截断.
(2).varbinary(n|max)
可变长度二进制数据. 其中 n 是从 1~8000 的值, max 指示存储大小为 2 的 31 次方 - 1 字节. 存储大小为所输入数据的实际长度 + 2 个字节.
在定义的范围内, 不论输入的时间长度是多少, binary 类型的数据都占用相同的存储空间, 即定义时空间, 而对于 varbinary 类型的数据, 在存储时实际值的长度使用存储空间.
回到顶部
9. 其他数据类型
(1).rowversion
每个数据都有一个计数器, 当对数据库中包含 rowversion 列的表执行插入或者更新操作时, 该计数器数值就会增加. 此计数器是数据库行版本. 一个表只能有一个 rowversion 列. 每次修改或者插入包含 rowversion 列的行时, 就会在 rowversion 列中插入经过增量的数据库行版本值.
公开数据库中自动生成的唯一二进制数字的数据类型. rowversion 通常用作给表行加版本戳的机制. 存储大小为 8 个字节. rowversion 数据类型只是递增的数字, 不保留日期或时间.
(2)timestamp
时间戳数据类型, timestamp 的数据类型为 rowversion 数据类型的同义词, 提供数据库范围内的唯一值, 反映数据修改的唯一顺序, 是一个单调上升的计数器, 此列的值被自动更新.
在 create table 或 alter table 语句中不必为提么 timestamp 数据类型指定列名.
eg:create table testTable (id int primary key,timestamp );
此时 Sql Server 数据库引擎将生成 timestamp 列名; 但 rowversion 不具备这样的行为, 在使用 rowversion 时, 必须指定列名.
(3).uniqueidentifier
16 字节的 GUID(Globally Unique Identifier, 全球唯一标识符), 是 Sql Server 根据网络适配器地址和主机 CPU 时钟产生的唯一号码, 其中, 每个为都是 0~9 或 a~f 范围内的十六进制数字. 例如: 6F9619FF-8B86-D011-B42D-00C04FC964FF, 此号码可以通过 newid() 函数获得, 在全世界各地的计算机由次函数产生的数字不会相同.
(4).cursor
游标数据类型, 该类型类似与数据表, 其保存的数据中的包含行和列值, 但是没有索引, 游标用来建立一个数据的数据集, 每次处理一行数据.
(5).sql_variant
用于存储除文本, 图形数据和 timestamp 数据外的其它任何合法的 Sql Server 数据, 可以方便 Sql Server 的开发工作.
(6).table
用于存储对表或视图处理后的结果集. 这种新的数据类型使得变量可以存储一个表, 从而使函数或过程返回查询结果更加方便, 快捷.
(7).xml
存储 xml 数据的数据类型. 可以在列中或者 xml 类型的变量中存储 xml 实例. 存储的 xml 数据类型表示实例大小不能超过 2GB.
回到顶部
二: 自定义数据类型
Sql Server 允许用户自定义数据类型, 用户自定义数据类型是建立在 Sql Server 系统数据类型的基础上的, 自定义的数据类型使得数据库开发人员能够根据需要定义符合自己开发需求的数据类型. 自定义数据类型虽然使用比较方便, 但是需要大量的性能开销, 所以使用时要谨慎. 当用户定义一种数据类型时, 需要指定该类型的名称, 所基于的系统数据类型以及是否允许为空等. Sql Server 为用户提供了两种方法来创建自定义数据类型. 下面分别介绍这两种个定义数据类型的方法.
(1). 使用对象资源管理器创建用户自定义数据类型
创建数据库 Test-->[可编程性] -->[类型] 节点, 右击 [用户定义数据类型] 节点, 在弹出的框中, 按照说明相应操作即可. 很简单, 就不截图赘述了.
(2). 使用存储过程创建用户自定义数据类型
触雷使用图形界面创建自定义数据类型, Sql Server 中的系统存储过程 sp_addtype 也可为用户提供使用 T_sql 语句创建自定义数据类型的方法. 其语法如下:
- sp_addtype [@typename= ] type,
- [@phystyle=] system_data_type
- [,[@nulltype =] 'null_type']
其中, 各参数的含义如下:
type: 用于指定用户定义的数据类型的名称.
system_data_type: 用于指定相应的系统提供的数据类型的名称及定义. 注意: 未能使用 timestamp 数据类型, 当所使用的系统数据类型有额外的说明时, 需要用引号将其括起来.
null_type: 用于指定用户自定义的的数据类型的 null 属性, 其值可为 "null" ,"not null" 或 "notnull". 默认时与系统默认的 null 属性相同. 用户自定义的数据类型的名称在数据库中应该是唯一的.
eg:sp_addtype homeAddress 'varchar(120)','not null'
删除用户自定义数据类型:
a. 用图形界面删除, 不做赘述.
b. 用系统存储过程 sp_droptype 删除. eg:sp_droptype homeAddress, 其中 homeAddress 为用户自定义数据类型名称.
注意: 数据库正在使用的用户自定义数据类型, 不能被删除.
来源: http://www.bubuko.com/infodetail-2717021.html