sql數據類型基本知識

SQL數據類型詳解
1 整數數據類型
整數型數據包括bigint型、int型、smallint型和tinyint型。
l bigint型數據的存儲大小爲8個字節,共64位。其中63位用於表示數值的大小,1位用於表示符號。bigint型數據可以存儲的數值範圍是-263~263-1,即 -9 223 372 036 854 775 808 ~9 223 372 036 854 775 807。
l int型數據的存儲大小爲4個字節,共32位。其中31位用於表示數值的大小,1位用於表示符號。int型數據存儲的數值範圍是-231~231-1,即-2 147 483 648~ 2 147 483 647。
l smallint型數據的存儲大小爲2個字節,共16位。其中15位用於表示數值的大小,1位用於表示符號。smallint型數據存儲的數值範圍是-215~215-1,即-32 768~ 32 767。
l tinyint型數據的存儲大小隻有1個字節,共8位,全部用於表示數值的大小,由於沒有符號位,所以tinyint型的數據只能表示正整數。tinyint型數據存儲的數值範圍是-27~27-1,即-256~255。
2 浮點數據類型
浮點數據類型用於存儲十進制小數。在SQL Server 2000中浮點數值的數據採用上舍入(Round up)的方式進行存儲,也就是說,要舍入的小數部分不論其大小,只要是一個非零的數,就要在該數字的最低有效位上加1,並進行必要的進位。由於浮點數據爲近似值,所以並非數據類型範圍內的所有數據都能精確地表示。
浮點數據類型包括real型、float型、decimal型和numeric型。
l real型數據的存儲大小爲4個字節,可精確到小數點後第7位數字。這種數據類型的數據存儲範圍爲從-3.40E+38~-1.18E-38,0和1.18E-38~3.40E+38。
l float型的數據存儲大小爲8個字節,可精確到小數點後第15位數字。這種數據類型的數據存儲範圍爲從-1.79E+308~-2.23E-308,0和2.23E+308~1.79E+308。
float型的數據可寫成float[(n)]的形式。其中n是1~15之間的整數值,指定float型數據的精度。當n爲1~7時,實際上用戶定義了一個real型的數據,系統用4個字節存儲;當n爲8~15時,系統認爲它是個float型的數據,用8個字節存儲它。這樣既增強了數據定義的靈活性,又節省了空間。
l decimal數據類型和numeric數據類型的功能完全一樣,它們都可以提供小數所需要的實際存儲空間,但也有一定的限制,用戶可以用2~17個字節來存儲數據,取值範圍是-1038+1~1038-1。
decimal型數據和numeric型數據的定義格式爲decimal[(p,[s])]和numeric[(p,[s])],其中p表示可供存儲的值的總位數(不包括小數點),默認值爲18;s表示小數點後的位數,默認值爲0;參數之間的關係是0≤s≤p。例如:decimal(15,5)表示共有15位數,其中整數10位,小數5位。
3 二進制數據類型
二進制數據類型用於存儲二進制數據,包括binary型、varbinary型和image型。
l binary型是固定長度的二進制數據類型,其定義形式爲binary(n),其中n表示數據的長度,取值爲1~8 000。在使用時應指定binary型數據的大小,默認值爲1個字節。binary類型的數據佔用n+4個字節的存儲空間。
在輸入數據時必須在數據前加上字符“0X”作爲二進制標識。例如:要輸入“abc”則應輸入“0Xabc”。若輸入的數據位數爲奇數,則系統會自動在起始符號“0X”的後面添加一個0。如上述輸入“0Xabc”後,系統會自動變爲“0X0abc”。
l varbinary型是可變長度的二進制數據類型,其定義形式爲varbinary(n),其中n表示數據的長度,取值爲1~8 000。如果輸入的數據長度超出n的範圍,則系統會自動截掉超出部分。
varbinary型具有變動長度的特性,因爲varbinary型數據的存儲長度爲實際數值長度+4個字節。當binnary型數據允許null值時,將被視爲varbinary型的數據。
一般情況下,由於binary型的數據長度固定,因此它比varbinary型的數據處理速度快。
l image型的數據也是可變長度的二進制數據,其最大長度爲231-1(2 147 483 647)個字節。
4 邏輯數據類型
邏輯數據類型只有一種bit型。bit數據類型只佔用1個字節的存儲空間,其值爲0和1。只要輸入的值爲非0,系統都會當作1處理。另外,bit型不能定義爲null值。
5 字符數據類型
字符數據類型是使用最多的數據類型,它可以用來存儲各種字母、數字符號、特殊符號等。一般情況下,使用字符類型數據時,須在數據的前後加上單引號或雙引號。字符數據類型包括char型、nchar型、varchar型和nvarchar型。
l char型是固定長度的非Unicode字符數據類型,在存儲時每個字符和符號佔用一個字節的存儲空間。其定義形式爲char[(n)],其中n表示所有字符所佔的存儲空間,取值爲1~8 000,即可容納8 000個ANSI字符,默認值爲1。若輸入的數據字符數小於n定義的範圍,則系統自動在其後添加空格來填滿設定好的空間;若輸入的數據字符數超過n定義的範圍,則系統自動截掉超出部分。
l nchar型是固定長度的Unicode字符數據類型,由於Unicode標準規定在存儲時每個字符和符號佔用2個字節的存儲空間,因此nchar型的數據比char型數據多佔用一倍的存儲空間。其定義形式爲nchar[(n)],其中n表示所有字符所佔的存儲空間,取值爲1~4 000,即可容納4 000個Unicode字符,默認值爲1。
使用Unicode標準字符集的好處是由於它使用兩個字節作存儲單位,使得一個存儲單位的容量大大增加,這樣就可以將全世界的語言文字都囊括在內。當用戶在一個數據列中同時輸入不同語言的文字符號時,系統不會出現編碼衝突。
l varchar型是可變長度的非Unicode字符數據類型。其定義形式爲varchar[(n)]。它與char型類似,n的取值範圍是1~8 000。由於varchar型具有可變長度的特性,所以varchar型數據的存儲長度爲實際數值的長度。如果輸入數據的字符數小於n定義的長度,系統也不會像char型那樣在數據後面用空格填充;但是如果輸入的數據長度大於n定義的長度,系統會自動截掉超出部分。
一般情況下,由於char型的數據長度固定,因此它比varchar型數據的處理速度快。
l nvarchar型是可變長度的Unicode字符數據類型,其定義形式爲nvarchar[(n)]。由於它採用了Unicode標準字符集,因此n的取值範圍是從1~4 000。nvarchar型的其他特性與varchar類型相似。
6 文本和圖形數據類型
文本和圖形數據類型是用於存儲大量的非Unicode和Unicode字符以及二進制數據的固定長度和可變長度數據類型,包括text型、ntext型和image型。
l text型是用於存儲大量非Unicode文本數據的可變長度數據類型,其容量理論上爲231-1(2 147 483 647)個字節。在實際應用時需要視硬盤的存儲空間而定。
在SQL Server 2000以前的版本中,數據庫中一個text對象存儲的實際上是一個指針,它指向一個以8KB爲單位的數據頁。這些數據頁是動態增加並被邏輯連接起來的。在SQL Server 2000中,則將text和image型的數據直接存放到表的數據行中,而不是存放到不同的數據頁中。這樣就減少了用於存儲text和image類型的空間,並相應減少了磁盤處理這類數據的I/O數量。
l ntext型是用於存儲大量Unicode文本數據的可變長度數據類型,其理論容量爲230-1(1 073 741 823)個字節。ntext型的其他用法與text型基本一樣。
l image型是用於存儲大量二進制數據的可變長度數據類型,其理論容量爲231-1 (2 147 483 647)個字節。Image型數據的存儲模式與text型數據相同,通常用來存儲圖形等OLE對象。在輸入數據時,與輸入二進制數據一樣,必須在數據前加上起始符號“0X”作爲二進制標識。
7 日期和時間數據類型
日期和時間數據類型代表日期和一天內的時間,包括datetime型和smalldatetime型。
l datetime型是用於存儲日期和時間的結合體的數據類型。它可以存儲從公元1753年1月1日零時起到公元9999年12月31日23時59分59秒之間的所有日期和時間,其精確度可達3%秒。
datetime型數據所佔用的存儲空間爲8個字節,其中前4個字節用於存儲1900年1月1日以前或以後的天數,數值分正負,正數表示在此日期之後的日期,負數表示在此日期之前的日期;後4個字節用於存儲從此日零時起所指定的時間經過的毫秒數。如果在輸入時省略了時間部分,則系統將默認爲12:00:00:000AM;如果省略了日期部分,系統將默認爲1900年1月1日。
l smalldatetime型與datetime型相似,但其存儲的日期時間範圍較小,從1900年1月1日到2079年6月6日。它的精度也較低,只能精確到分鐘級,其分鐘個位上的值是根據秒數並以30秒爲界四捨五入得到的。
Smalldatetime型數據所佔用的存儲空間爲4個字節,其中前兩個字節存儲從基礎日期1900年1月1日以來的天數,後兩個字節存儲此日零時起所指定的時間經過的分鐘數。
8 貨幣數據類型
貨幣數據類型用於存儲貨幣或現金值,包括money型和smallmoney型。在使用貨幣數據類型時,應在數據前加上貨幣符號,以便系統辨識其爲哪國的貨幣,如果不加貨幣符號,則系統默認爲“¥”。
l money型是一個有4位小數的decimal值,其取值從-263(-9 223 372 036 854 775 808) ~263-1(+9 223 372 036 854 775 807),精確到貨幣單位的千分之十。存儲大小爲8個字節。
l smallmoney型貨幣數據值介於-2 147 483 648~+2 147 483 647之間,精確到貨幣單位的千分之十。存儲大小爲 4 個字節。
9 特定數據類型
SQL Server 2000中包含了一些用於數據存儲的特殊數據類型,包括timestamp型和 uniqueidentifier型。
l timestamp數據類型提供數據庫範圍內的惟一值,它相當於binary(8)或varbinary(8),但當它所定義的列在進行更新或插入數據行操作時,此列的值會自動更新。每個數據庫表中只能有一個timestamp型數據列。如果表中的列名爲“timestamp”,則該列的類型將被自動定義爲timestamp型。
l uniqueidentifier數據類型用於存儲一個16位的二進制數據,此數據稱爲全局惟一標識符(Globally Unique Identifier,GUID)。此數據由SQL Server 2000的NEWID()函數產生,在全球各地的計算機經由此函數產生的數字不會相同。
10 用戶自定義數據類型
sysname數據類型是系統提供給用戶的,便於用戶自定義的數據類型。該數據類型被定義爲NVARCHAR(128),即它可以存儲128個Unicode字符或256個一般字符。
11 新增數據類型
前面講到過SQL Server 2000新增了3種數據類型:bigint型、sql_variant型和table型。其中bigint型已經在整數類型中介紹過了。
l sql_variant型是一種存儲SQL Server支持的各種數據類型(text、ntext、timestamp 和sql_variant除外)值的數據類型。此數據類型大大方便了SQL Server的開發工作。
l table型用於存儲對錶或視圖處理後的結果集。table數據類型不適用於表中的列,而只能用於Transact-SQL變量和用戶定義函數的返回值。這一類型使得變量可以存儲一個表,從而使函數或過程返回查詢結果更加方便快捷。



關於ntext、text 和 image 數據
ntext、text 和 image 數據類型在單個值中可以包含非常大的數據量(最大可
   達 2 GB)。單個數據值通常比應用程序在一個步驟中能夠檢索的大;某些值可能還會大於客戶端的可用虛擬內存。因此,
   在檢索這些值時,通常需要一些特殊的步驟。
 

 
   如果 ntext、text 和 image 數據值不超過 Unicode 串、字符串或二進制串的長度(分別爲 4,000 個字符、8,000 個字
   符和 8,000 個字節),就可以在 SELECT、UPDATE 和 INSERT 語句中引用它們,其引用方式與較小的數據類型相同。例
   如,包含短值的 ntext 列可以在 SELECT 語句的選擇列表中引用,這與 nvarchar 列的引用方式相同。引用時必須遵守一
   些限制,例如不能在 WHERE 子句中直接引用 ntext、text 或 image 列。這些列可以作爲返回其它數據類型(例如
   ISNULL、SUBSTRING 或 PATINDEX)的某個函數的參數包含在 WHERE 子句中,也可以包含在 IS NULL、IS NOT NULL 或
   LIKE 表達式中。
  
   處理較大的數據值
   但是,如果 ntext、text 和 image 數據值較大,則必須逐塊處理。Transact-SQL 和數據庫 API 均包含使應用程序可以
   逐塊處理 ntext、text 和 image 數據的函數。

char、varchar、text和nchar、nvarchar、ntext的區別
1、CHAR。CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,比如定義char(10),那麼不論你存儲的數據是否達到了10個字節,都要佔去10個字節的空間,不足的自動用空格填充。
2、VARCHAR。存儲變長數據,但存儲效率沒有CHAR高。如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義爲 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。爲什麼“+1”呢?這一個字節用於保存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。
3、TEXT。text存儲可變長度的非Unicode數據,最大長度爲2^31-1(2,147,483,647)個字符。
4、NCHAR、NVARCHAR、NTEXT。這三種從名字上看比前面三種多了個“N”。它表示存儲的是Unicode數據類型的字符。我們知道字符中,英文字符只需要一個字節存儲就足夠了,但漢字衆多,需要兩個字節存儲,英文與漢字同時存在時容易造成混亂,Unicode字符集就是爲了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數據類型時不用擔心輸入的字符是英文還是漢字,較爲方便,但在存儲英文時數量上有些損失。


對於什麼時候用varchar和nvarchar沒有說一定的.
也就是說一個漢字既可以存在varchar中,也可以存在nvarchar中.
那麼對於漢字或者Unicode 數據到底存在varchar和nvarchar有什麼區別呢?
下面例子說明一下:一個漢字佔varchar(2),只佔nvarchar(1),而字母只佔varchar(1),那麼在數據庫字段求長度的時候,用varchar你就不一定知道它確切的知道它到底有幾個字,如果用nvarchar,那麼漢字也是nvarchar(1),字母也是nvarchar(1),那麼已經很明顯了.
區別2:varchar的檢索快於nvarchar
發佈了61 篇原創文章 · 獲贊 28 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章