數據庫中數據類型詳解

請問在數據類型裏 
1,char,nchar,nvarchar,varchar有什麼區別? 
2,text和ntext有什麼區別以及和上面各類字符類有什麼區別?
3,關於帶big和帶small的類型,好比:smallint,int和bigint;以及smalldatetime,datetime和bigdatetime有什麼區別? 
===========================================================================
兩個字符型字段分別定義爲char(10)和varchar(10),當給它們存入「123」這個數據時,char(10)字段佔用十個字節的存儲空間,而varchar(10)只佔用3個字節存儲空間,這就是char和varchar的區別。能夠看出varchar比較適合存儲長度變化很大的數據。 
nchar和char,nvarchar和varchar的區別在因而否使用Unicode進行編碼。通常狀況下在僅僅處理中文及英文,不涉及特殊符號時不須要使用Unicode。另外一種須要用Unicode的狀況是須要將字符串數據添加到SQL語句中執行,又不想裏面的東西如單引號使SQL產生誤解,能夠將其用Unicode編碼,這時每一個字符都將佔用兩個字節,單引號也不會被SQL識別了。 
ntext和text的區別也是同樣。因爲每一個字符都佔用兩個字節,比較適合存儲純中文包括少許英文的數據。 
smallint、int和bigint的區別僅僅在於位數不一樣。smallint可存儲2字節整數(-32768~32767),int可存儲4字節整數(-2147483648~2147483647),bigint可存儲8字節整數(-9223372036854775808~9223372036854775807)。 
smalldatetime用兩個字節存儲,可表示從1900年1月1日到2079年6月6日之間的任什麼時候間,精確到分鐘。datetime用四個字節存儲,可表示1753年1月1日到9999年12月31日的任什麼時候間,精確到百分之三秒。 
sql中沒有bigdatetime類型。
\=================================================================
簡單的說: 
char和nchar是定長字符串類型,varchar和nvarchar是變長字符串類型。也就是說若是字段類型爲char(10),那麼即便你輸入的字符爲'abc',在數據庫中也會保存成' abc',字段前面會被自動補上7個空格。而使用varchar(10)則前面不會補空格。 
至於前面那個n有什麼不一樣,有n表明支持unicode字符,而沒有n的則不支持,text和ntext的區別也是同樣。 
text和char及varchar的區別在於,char和varchar字段的數據是保存在表中,而text字段能夠保存大容量的文本,數據是保存在另外的空間裏,固然在表面上看來並無什麼區別。 
關於帶big和small的類型。small表明是簡化的數據類型,支持的範圍比較小,但佔用的空間也小。big是超大的數據類型,佔用的空間大,但支持的範圍也大。好比smallint只佔用一個字節,可是隻能支持0-255的數字。datetime也是同樣。 
回答者:abingpow - 見習魔法師 三級 5-11 10:14
========================================================================
abingpow說的很對 
補充: 
1. char 和nchar 當填入數據爲空時,數據庫自動使用全空格來代替,從而使not null形同虛設。因此若是字段不能爲空,必定要在程序中提早判斷。 
2. char 和nchar由於長度固定,聽說讀寫的速度要比 varchar和nvarchar快 
=========================================================================
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)數字數據類型  數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數  整數由正整數和負整數組成,例如 3九、2五、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是很是有用。例如,在客戶標識號列使用這種數據類型能夠區別不一樣的客戶。  ======================================================================= 用戶定義的數據類型  用戶定義的數據類型基於在 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' 注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。  本人補充一下: ACCESS數據表中字段中若是有:數據類型「是/否」,當轉爲SQL SERVER數據表時,數據類型變爲「bit」,當用VBA增長新記錄時,若是該字段沒有操做的話,則值爲NULL,在SQLSER中,若是此字段爲NULL,即便在表設計時容許該字段爲空,但修改記錄的任一字段也會出現上述「寫入衝突」的現象。  解決方法一:在VBA增長記錄時要把該記錄的值轉爲0或1 解決方法二:在SQL SEFVER中的從新設計表,使字段不容許空,且默認值爲0,這樣不用在程序中加入代碼
相關文章
相關標籤/搜索