資料庫資料類型

來源:互聯網
上載者:User

請問在資料類型裡 
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)數字資料類型 
數字資料只包含數字。數字資料類型包括正數和負數、小數(浮點數)和整數 
整數由正整數和負整數組成,例如 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是非常有用。例如,在客戶標識號列使用這種資料類型可以區別不同的客戶。 
=======================================================================
使用者定義的資料類型 
使用者定義的資料類型基於在 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,這樣不用在程式中加入代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.