SQL Server数据库的数据类型详细介绍
 
SQLServer 提供了 25 种数据类型: 
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[(n)]和Varbinary[(n)] :n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。 
Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解
释。
例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。
 
(2)字符数据类型 
字符数据的类型包括 Char,Varchar 和 Text 
字符数据是由任何字母、符号和数字任意组合而成的数据。 
Char和Varchar:长度不超过 8KB。
超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,
并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。
 
(3)Unicode 数据类型 
Unicode 数据类型包括 Nchar,Nvarchar 和Ntext 
 
(4)日期和时间数据类型 
日期和时间数据类型包括 Datetime, Smalldatetime, Date, TimeStamp
日期和时间数据类型由有效的日期和时间组成。
例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。
Datetime所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。
使用 Smalldatetime 数据类型时,
所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字
节)。 
Date只有日期。
TimeStamp会自动更新,标记表最后修改的时间。
日期的格式可以设定。设置日期格式的命令如下: 
Set DateFormat {format | @format _var|
其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在
默认情况下,日期格式为MDY。 
例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;
当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式。
 
(5)数字数据类型 
数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数 
(6)货币数据表示正的或者负的货币数量 。 
在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney 。
而Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。
 
(7)特殊数据类型 
特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即Timestamp、Bit 和
字符串是什么字段类型
Uniqueidentifier。 
Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据
或者日期和时间没有关系。 
Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。
例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。 
Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。
当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的
客户。 
—————————————————————————————————————————————
1:char,nchar,nvarchar,varchar有什么区别?
char()字段创建指定大小的空间
varchar()字段创建的存储长度可变的数据
nchar和char,nvarchar和varchar的区别在于是否使用Unicode进行编码,一般情况下在仅仅处理中文及
英文,不涉及特殊符号时不需要使用Unicode。另一种需要用Unicode的情况是需要将字符串数据添加到
SQL语句中执行,又不想里面的东西如单引号使SQL产生误解,可以将其用Unicode编码,这时每个字符都
将占用两个字节,单引号也不会被SQL识别了。
 
2:text和ntext和上面各种字符类有什么区别?
由于每个字符都占用两个字节,比较适合存储纯中文包括少量英文的数据。
 
3:tinyint,smallint,int和bigint区别?
tinyint可存储1字节整数(0~255),
smallint可存储2字节整数(-32768~32767),
int可存储4字节整数(-2147483648~2147483647),
bigint可存储8字节整数(-9223372036854775808~9223372036854775807)。
 
4:smalldatetime,datetime有什么区别?
smalldatetime用两个字节存储,可表示从1900年1月1日到2079年6月6日之间的任何时间,精确到分钟。
datetime用四个字节存储,可表示1753年1月1日到9999年12月31日的任何时间,精确到百分之三秒。
 
5:char和text的区别
char字段的数据是保存在表中,而text字段可以保存大容量的文本,数据是保存在另外的空间里,表面
上看来并没有什么区别。 
 
注意:
var代表存储空间大小可变(不可变的在字段前用空格填充)
n代表使用Unicode编码
=======================================================================
用户定义的数据类型 
 
用户定义的数据类型基于在 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'
注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用
户定义的数据类型不能删除。 
本人补充一下:
ACCESS数据表中字段中如果有:数据类型“是/否”,当转为SQL SERVER数据表时,数据类型变为“bit
”,当用VBA增加新记录时,如果该字段没有操作的话,则值为NULL,在SQLSER中,如果此字段为NULL,
即使在表设计时允许该字段为空,但修改记录的任一字段也会出现上述“写入冲突”的现象。 
解决方法一:在VBA增加记录时要把该记录的值转为0或1
解决方法二:在SQL SEFVER中的重新设计表,使字段不允许空,且默认值为0,这样不用在程序中加入代

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。