免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

SQL 資料型態

SQL資料型態 與 .NET程式資料格式對照表

---------------------------------------------------------------------------
參考資料


◎ 資料類型的預設值及有效範圍
資料型態預設值 有效範圍
char 10 1-8000
varchar 50 1-8000
binary 50 1-8000
varbinary 50 1-8000
nchar 10 1-4000
nvarchar 50 1-4000
char、varchar、binary、varbinary等資料型態的上限值從SQL Server 6.x 255個bytes的限制增加為 8000個bytes。Transact-SQL字串函數也支援這些超長的char與varchar值。text與image資料型態的使用 can now be reserved for very large 資料 values。Substring函數可以用來處理text與image欄位。Nulls與空字串的處理也有改進。新的uniqueidentifier資料型態是提供給儲存globally unique identifier (GUID)使用的。
Text、 ntext、和image的值不是以資料橫列的方式來儲存,而是儲存在屬於它們自己個別所擁有的分頁裡。對於這些資料值來說,它們儲存在資料橫列裡的是一個16-byte指標。對於每一個橫列而言,這指標是指向資料所在的位置。一個含有多個text、ntext、或image欄位的橫列每一個欄位都有一個指標。
在SQL Server 7.0裡,分頁在邏輯上是組織成一個b-tree結構,但在舊版的SQL Server裡,它們是串接在一起形成分頁連結(page chain)。這SQL Server 7.0方法的優點在於以字串的中間開始執行的操作會更有效率。SQL Server 7.0 可以快速的瀏覽b-tree, 但舊版的SQL Server必須掃瞄整個分頁連結。
個別的text、ntext、及image分頁不會被限制只能儲存一個出現(occurrence)的資料。 一個可以儲存多個橫列的資料;甚至還可以將這類型態的資料混合在一起儲存到一個分頁中。
◎ SQL Server 中的資料類型
精確數值
bigint
numeric
bit
smallint
decimal
smallmoney
int
tinyint
money

近似數值
float
real
日期和時間
date
datetimeoffset
datetime2
smalldatetime
datetime
time
字元字串
char
varchar
text
Unicode 字元字串
nchar
nvarchar
ntext

二進位字串
binary
varbinary
image

其他資料類型
cursor
timestamp
hierarchyid
uniqueidentifier
sql_variant
xml
table
◎ 資料類型優先順序 (Transact-SQL)
當一個運算子結合兩個不同資料類型的運算式時,資料類型優先順序的規則,會指定將低優先順序的資料類型,轉換為高優先順序的資料類型。如果轉換不是支援的隱含轉換,就會傳回錯誤。如果這兩個運算元運算式的資料類型相同,則作業結果就含有該資料類型。
SQL Server 會使用下列資料類型優先順序:
   1. 使用者自訂資料類型 (最高)
   2. sql_varian t
   3. xml
   4. datetimeoffset
   5. datetime2
   6. datetime
   7. smalldatetime
   8. date
   9. time
  10. float
  11. real
  12. decimal
  13. money
  14. smallmoney
  15. bigint
  16. int
  17. smallint
  18. tinyint
  19. bit
  20. ntext
  21. text
  22. image
  23. timestamp
  24. uniqueidentifier
  25. nvarchar (包括 nvarchar(max) )
  26. nchar
  27. varchar (包括 varchar(max) )
  28. char
  29. varbinary (包括 varbinary(max) )
  30. binary (最低)





---------------------------------------------------------------------------
參考資料

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
(1)二進制資料類型
  二進制封包括 Binary、Varbinary 和 Image
  Binary 資料類型既可以是固定長度的(Binary),也可以是變長度的。
  Binary[(n)] 是 n 位固定的二進制資料。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4 個字節。
  Varbinary[(n)] 是 n 位變長度的二進制資料。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4個字節,不是n 個字節。
  在 Image 資料類型中存儲的資料是以位字符串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把資料存儲在 Image 資料類型中。
(2)字符資料類型
  字符資料的類型包括 Char,Varchar 和 Text
  字符資料是由任何字母、符號和數字任意組合而成的資料。
  Varchar 是變長字符資料,其長度不超過 8KB。Char 是定長字符資料,其長度最多為 8KB超過 8KB 的ASCII 資料可以使用Text資料類型存儲。例如,因為 Html 文檔全部都是 ASCII 字符,並且在一般情況下長度超過 8KB,所以這些文檔可以 Text 資料類型存儲在SQL Server 中。
(3)Unicode 資料類型
  Unicode 資料類型包括 Nchar,Nvarchar 和Ntext
  在 Microsoft SQL Server 中,傳統的非 Unicode 資料類型允許使用由特定字符集定義的字符。在 SQL Server安裝過程中,允許選擇一種字符集。使用 Unicode 資料類型,列中可以存儲任何由Unicode 標準定義的字符。在 Unicode 標準中,包括了以各種字符集定義的全部字符。使用Unicode資料類型,所戰勝的窨是使用非 Unicode 資料類型所佔用的窨大小的兩倍。
  在 SQL Server 中,Unicode 資料以 Nchar、Nvarchar 和 Ntext 資料類型存儲。使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使用Nvarchar 字符類型,這時最多可以存儲 4000 個字符。當列的長度固定不變時,應該使用 Nchar 字符類型,同樣,這時最多可以存儲4000 個字符。當使用 Ntext 資料類型時,該列可以存儲多於 4000 個字符。
(4)日期和時間資料類型
  日期和時間資料類型包括 Datetime 和 Smalldatetime兩種類型
  日期和時間資料類型由有效的日期和時間組成。例如,有效的日期和時間封包括「4/01/98 12:15:00:00:00 PM」和「1:28:29:15:01AM 8/17/98」。前一個資料類型是日期在前,時間在後一個資料類型是霎時間在前,日期在後。在 Microsoft SQL Server中,日期和時間資料類型包括Datetime 和 Smalldatetime 兩種類型時,所存儲的日期範圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存儲字節)。使用 Smalldatetime 資料類型時,所存儲的日期範圍是 1900年 1 月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲字節)。
  日期的格式可以設定。設置日期格式的命令如下:
  Set DateFormat {format | @format _var|
  其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在預設情況下,日期格式為MDY。
  例如,當執行 Set DateFormat YMD 之後,日期的格式為年 月 日 形式;當執行 Set DateFormat DMY 之後,日期的格式為日 月有年 形式

(5)數字資料類型
  數字資料只包含數字。數字資料類型包括正數和負數、小數(浮點數)和整數
  整數由正整數和負整數組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數存儲的資料類型是    Int,Smallint和 Tinyint。Int 資料類型存儲資料的範圍大於 Smallint 資料類型存儲資料的範圍,而 Smallint 據類型存儲資料的範圍大於Tinyint 資料類型存儲資料的範圍。使用 Int 資料狗昔存儲資料的範圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個字節存儲空間)。使用 Smallint 資料類型時,存儲資料的範圍從 -32 768 到 32 767(每一個值要求2個字節存儲空間)。使用Tinyint 資料類型時,存儲資料的範圍是從0 到255(每一個值要求1個字節存儲空間)。
  精確小婁資料在 SQL Server 中的資料類型是 Decimal 和 Numeric。這種資料所佔的存儲空間根據該資料的位數後的位數來確定。
  在SQL Server 中,近似小數資料的資料類型是 Float 和 Real。例如,三分之一這個分數記作。3333333,當使用近似資料類型時能準確表示。因此,從系統中檢索到的資料可能與存儲在該列中資料不完全一樣。
(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是非常有用。例如,在客戶標識號列使用這種資料類型可以區別不同的客戶。
2.用戶定義的資料類型
  用戶定義的資料類型基於在 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'
  注意:當表中的列還正在使用用戶定義的資料類型時,或者在其上面還綁定有預設或者規則時,這種用戶定義的資料類型不能刪除。

SQL SERVER的字段類型說明

  以下為SQL SERVER7.0以上版本的字段類型說明。SQL SERVER6.5的字段類型說明請參考SQL SERVER提供的說明。

字段類型 描述
bit 0或1的整型數字
int 從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字
smallint 從-2^15(-32,768)到2^15(32,767)的整型數字
tinyint 從0到255的整型數字

decimal 從-10^38到10^38-1的定精度與有效位數的數字
numeric decimal的同義詞

money 從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣資料,最小貨幣單位千分之十
smallmoney 從-214,748.3648到214,748.3647的貨幣資料,最小貨幣單位千分之十

float 從-1.79E+308到1.79E+308可變精度的數字
real 從-3.04E+38到3.04E+38可變精度的數字

datetime 從1753年1月1日到9999年12日31的日期和時間資料,最小時間單位為百分之三秒或3.33毫秒
smalldatetime 從1900年1月1日到2079年6月6日的日期和時間資料,最小時間單位為分鐘

timestamp 時間戳,一個資料庫寬度的唯一數字
uniqueidentifier 全球唯一標識符GUID

char 定長非Unicode的字元型資料,最大長度為8000
varchar 變長非Unicode的字元型資料,最大長度為8000
text 變長非Unicode的字元型資料,最大長度為2^31-1(2G)

nchar 定長Unicode的字元型資料,最大長度為8000
nvarchar 變長Unicode的字元型資料,最大長度為8000
ntext 變長Unicode的字元型資料,最大長度為2^31-1(2G)

binary 定長二進制資料,最大長度為8000
varbinary 變長二進制資料,最大長度為8000
image 變長二進制資料,最大長度為2^31-1(2G)




--------------------------------------------------------------------------------------
參考資料
1.bigint

儲存空間長度為 8 個位元組,可儲存從 2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807 的數字。

2.integer 或 int

儲存空間長度為 4 個位元組,可儲存從 -2,147,483,648 到 2,147,483,647 的數字。

3.smallint

儲存空間長度為 2 個位元組,可儲存從 -32,768 到 32,767 的數字。

4.tinyint

儲存空間長度為 1 個位元組,可儲存從 0 到 255 的數字。

Microsoft SQL Server 2005數值資料類型:

decimal(p,s),numeric(p,s)

儲存空間長度為 5-17 個位元組,由有效位數決定。

        有效位數(p)                    儲存空間
           1 – 9                        5個位元組
           10-19                       9個位元組
           20-28                       13個位元組
           29-38                       17個位元組


為了減少儲存空間,建議目前欄位資料型態設定為


目前設定                 儲存空間      建議改為     儲存空間

numeric(1~2,0)       5 bytes      tinyint        1 byte
numeric(3~4,0)       5 bytes      smallint      2 bytes
numeric(5~9,0)       5 bytes      integer       4 bytes


舉例來說:A表格V1~V110共110個欄位,目前資料型態為numeric(9,0),儲存空間是5bytes*110=550bytes,若改為integer型態,則儲存空間為4bytes*110=440bytes,一筆資料少110bytes,以目前該Table的25324筆資料則可節省2785640bytes約2720k,即約2.6MB的空間。

文字型態,則須考量varchar與nvarchar的使用,因為最基本的使用空間為1byte與2bytes,假如沒有Unicode字元的考量,舉例說明,若為控制檔的code,其儲存就應以varchar為主,而不是使用nvarchar型態。而針對nvarchar(100)或是nvarchar(1000)應考量實際使用狀況作調整,。
返回列表