2010-12-22 100 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),否則它的大小,以滿足您的需求