SQL 字段属性
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL SERVER的数据类型
1.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
以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。
2. 字符数据类型
字符数据的类型包括Char,Nchar,Varchar,Nvarchar 和 Text。字符数据是由任何字母、符号和数字任意组合而成的数据。
Varchar 是变长字符数据,其长度不超过 8KB。存储效率(存储数据的快慢)没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
Char 是定长字符数据,其长度最多为 8KB。Char(n): 系统分配n个字节给此字段,不管字段实际长度(后边用空格补齐) 。CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。现在Text被淘汰。
1)到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?
结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间,
而且处理起来会快些,无法定长只好选用定长,并且将长度设置尽可能地小;另一种是则是觉得
无所谓,尽量用可变类型的,长度尽量放大些。鉴于现在硬件像萝卜一样便宜的大好形势,纠
缠这样的小问题实在是没多大意义,不过如果不弄清它,总觉得对不起劳累过度的CPU和硬盘。
2)nvarchar 和 varchar 的区别
nvarchar 和 varchar 的区别是存储方式不同
varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unicode来存储数据的。中文字符存储到SQL Server中会保存为两个字节(一般采用Unicode编码),英文字符保存到数
据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节。varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符
1个字符就等于2个字节,所以varchar(40)只能存储20个中文字符。nvarchar(40),就可以存储40
个中文字符,也就是说可以存储80个字节长度的字符。nvarchar要相对于存储的字符类型.
正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系
统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发
阶段是发现不了的.多数情况下,在布署的时候也不会有问题.但是!如果布署的主机是英文操
作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变
成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造
成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯
一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项目管理比较熟悉的
朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.
使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.
当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储.
从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
1.char 数据类型使用固定长度来存储字符,最长可以容纳8000个字节。利用char数据类型来定义表列或定义变量时,应该给定数据的最大长度。如果实际的字符长度短于给定的最大长充,刚多的字节会被空格填充。如果实际的多了,则被截断。(好处:可以精确计算数据占有的空间)
2.varchar是最长可以达到8000字节的变长字符型数据。它随存储在表列中的每一个数据的字符数的不同而变化。例如,定义表列为varchar(20),那么存储在该列的数据最多可以长达20个字节,如没达到20个字节,并不会在多余的字节上填充空格。所以大部分时候都选择varchar,可以有效的节省空间,不浪费。