2010-12-22 65 views
7

我有点困惑,因为有很多变量类型在SQL服务器(ntext,varchar,nvarchar等),所以也许如果你给我什么数据类型你用于下列领域我会更好地理解这一点。如果我错过了一个常见的字段类型,请告诉我。SQL Server:最常用的数据类型?

ID
电话号码
电子邮件
说明(一段文字)
名称
SSN
价格
交货日期
性别(男/女)
停产(是/否)
数量
邮政编码

+2

如果您的应用程序的目标是在世界范围内的观众,我会建议使用Unicode字符串类型(`nchar`,`nvarchar`)代替旧的8位类型(`char`,`varchar`)用于输入或显示给用户的任何内容。 – devstuff 2010-12-22 04:37:05

回答

1

这是我在过去

ID = bigint 
Telephone = varchar(12) 
Email = varchar(100) 
Description = nvarchar(max) (sql Server 2005 and 2008 only) 
Name = nvarchar(100) 
SSN = varchar(11) 
Price = money 
ShipDate = datetime (date if using SQL Server 2008) 
Sex = char(1) (i have also used bit before 0 = female 1 =male) 
Discontinued (true false field) = bit 
Quantity = int if not fractional decimal if it is fractional 
ZipCode = varchar(10) 
5
Field -> Data Type 
----- --------- 
Id  int 
Phone # varchar 
Email varchar 
Desc  varchar 
Name  varchar 
Ssn  varchar 
Price decimal, money, smallmoney 
ShipDate datetime 
Sex  bit 
Discont bit 
Quantity int 
ZipCode varchar 
+0

我有一个名为class的表,它包含两列ClassId和Class。我只能在该表中存储12条记录。例如:IX,X,XI,XII,BCom-I等。我的问题:你会为我的ClassId列建议什么数据类型,为什么? – kashif 2013-04-11 23:10:00

+0

@ kashif - 如果您已经知道只有12个项目,并且您确切知道这些项目将会是什么,那么我可能根本不会将它们放入数据库中。但是,如果我不得不选择,我肯定会选择一个int列作为id。 – 2013-04-11 23:37:01

+0

我其实有一个学生数据库。我用一个组合框绑定我的Class表,并将Class列保留在Class表中作为显示成员和ClassId作为值标记。在我的studentInfo表中,我使用了一个CLASS CLASSIID,即StudentInfo.ClassId和一个外键给Class.ClassId。我希望你现在能理解我的情况 – kashif 2013-04-12 15:09:14

2
ID - int 
Telephone - varchar(12) 
email - varchar(size) 
descripion varchar(max) 
name -varchar(size) 
ssn - varchar(11) 
price - smallmoney (or money if needed) 
shipdate - date (for sql server 2008, or smalldatetime for pre-2008) 
discontinued - bit 
quanity - int 
zipcode - varchar(10) 

很多的人会推荐为nvarchar在所有情况下,而不是为varchar,但知道我的网站/观众都用过,我不需要考虑到国际字符集,并且不想浪费空间/速度/资源(我知道最少)。如果你需要,那么替代为nvarchar酌情

1
ID      int or bigint 
Telephone Number  varchar 
Email     varchar 
Description   varchar 
Name     varchar 
SSN     varchar 
Price     money 
Ship Date    datetime or date 
Sex (m/f)    char(1) 
Discontinued (yes/no) bit 
Quantity    int 
Zip Code    varchar 
10

简要推荐:

  • TEXT, NTEXT, IMAGE:所有那些类型弃用并计划在SQL Server的未来版本中删除 - 不要使用这些!

  • CHARVARCHARCHAR是固定长度的,并且它会随着空间所定义的长度填充输入。最适合短字符串(< 5个字符),例如代码,如货币(几乎总是3个字符),美国地位(2个字符)等。另一方面VARCHAR最适合较长的字符串,并且只存储插入/更新的字符。如果你定义一个VARCHAR(200)只有插入Christmas到现场,你的领域占据了9个字符(和开销的豆蔻位)

  • NCHAR/NVARCHAR:以上的Unicode版本;每个字符总是保存2个字节,所以其中的Christmas字段将存储9个字符并使用18个字节。如果您有非西欧文字 - 如西里尔文,阿拉伯文,希伯来文,亚洲文字或其他字母,则需要这些文字。

  • VARCHAR(MAX)/NVARCHAR(MAX)TEXTNTEXT的替代品 - 最多存储数据的2千兆字节(2个十亿字节) - 这是托尔斯泰的War and Peace的含量超过300倍 - 应足以为广大大多数情况下:-)

所以决策树可能是这样的:

  1. 我是否需要非西方欧洲字符?如果是 - >使用NCHAR/NVARCHAR类型,否则CHAR/VARCHAR

  2. 是我的字符串非常短(< 5个字符)并且通常始终是相同的长度?如果是:使用CHAR,否则VARCHAR

  3. 我是否需要非常大量的文本?如果是这样,使用VARCHAR(MAX),否则它的大小,以满足您的需求