標籤:http 人民幣 follow sig 自己 color 開發 code 字串處理
int、bigint、smallint 和 tinyint
使用整數資料的精確數字資料類型。
bigint
從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型資料(全部數字)。
儲存大小為 8 個位元組。
int
從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型資料(全部數字)。儲存大小為 4 個位元組。int 的 SQL-92 同義字為 integer。
smallint
從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型資料。
儲存大小為 2 個位元組。
tinyint
從 0 到 255 的整型資料。儲存大小為 1 位元組。
凝視
在支援整數值的地方支援 bigint 資料類型。可是,bigint 用於某些特殊的情況,當整數值超過 int 資料類型支援的範圍時,就能夠採用 bigint。
在 SQL Server 中,int 資料類型是基本的整數資料類型。
在資料類型優先次序表中,bigint 位於 smallmoney 和 int 之間。
僅僅有當參數運算式是 bigint 資料類型時,函數才返回 bigint。SQL Server 不會自己主動將其他整數資料類型(tinyint、smallint 和 int)提升為 bigint。
char、varchar、nchar、nvarchar類型解說:
一、基本差別:
1、char、varchar
char(n): 定長資料類型,n為能儲存的最大位元組長度(取值範圍1~8000),當存入字元數少於n的時候,末尾用空格不足。
當存入字元數超過n的時候,資料庫階段n之後的字元截斷。
varchar(n): 變長資料類型,n為能儲存的最大位元組長度(取值範圍1~8000)。當儲存字元佔用位元組少於n時,以實際使用為準;超過n時,截斷。
這裡為什麼說n是來限定儲存的位元組呢?
原因在於當使用char或varchar來儲存資料是:字元為由於字元,佔一個位元組。字元中文字元時,一個中文字元普通情況下佔兩個位元組。要存入的字元為中英文混合時。按實際使用的位元組計算。如‘中文ABC’儲存佔用位元組為:2*2+3:。以下舉個範例:
declare @var1 varchar(6), @var2 varchar(5);
set @var1=‘中文AB‘;
set @var2=‘中文AB‘;
select @var1, @var2;
運行結果例如以下:
| 未知列1 | 未知列2 |
---------------------------------------
| 中文AB | 中文A |
原因在於“中文AB”使用varchar類型來儲存時佔用位元組為:2*2+2=6。 第二個varchar(5)限定了最長為5個位元組所以會把超出部分截斷,既‘B’丟失。
2、ncahr、nvarchar
nchar(n): 定長資料類型。儲存字元為Unicode編碼類別型,每一個字元佔兩個位元組,n為能儲存的最大字元數(取值範圍1~4000【想想最大值為什麼是4000?】),當存入字元數少於n的時候,末尾用空格不足。當存入字元數超過n的時候。資料庫階段n之後的字元。
nvarchar(n): 變長資料類型,儲存字元為Unicode編碼類別型,每一個字元佔兩個位元組,n為能儲存的最大字元數(取值範圍1~4000),當儲存字元佔用位元組少於n時,以實際使用為準;超過n時,截斷。
相同以一個範例來說明,nvarchar(n)括弧裡的n指的是字元限定數。
declare @var1 nvarchar(4), @var2 nvarchar(3);
set @var1=‘中文AB‘;
set @var2=‘中文AB‘;
select @var1, @var2;
運行結果例如以下:
| 未知列1 | 未知列2 |
---------------------------------------
| 中文AB | 中文A |
二、使用方式:
【本段摘自http://www.cnblogs.com/ebaidu/archive/2007/08/14/854778.html僅供學習使用】
非常多開發人員進行資料庫設計的時候往往並沒有太多的考慮char, varchar類型,有的是根本就沒注意,由於儲存價格變得越來越廉價了,忘記了最開始的一些基本設計理論和原則,這點讓我想到了如今的年輕人,大手一揮一把人民幣就從他手裡溜走了。事實上我想無論是做人也好。做開發也好,細節的把握直接決定非常多東西。當然另一部分人是根本就沒弄清楚他們的差別,也就隨便選一個。在這裡我想對他們做個簡單的分析。當然假設有不正確的地方希望大家不吝賜教。
1、CHAR。CHAR儲存定長資料非常方便,CHAR欄位上的索引效率級高,比方定義char(10),那麼不論你儲存的資料是否達到了10個位元組。都要佔去10個位元組的空間,不足的自己主動用空格填充,所以在讀取的時候可能要多次用到trim() 。
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資料類型的字元。我們知道字元中。英文字元僅僅須要一個位元組儲存就足夠了,但漢字眾多,須要兩個位元組儲存,英文與漢字同一時候存在時easy造成混亂。Unicode字元集就是為瞭解決字元集這樣的不相容的問題而產生的,它全部的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。 nchar、 nvarchar的長度是在1到4000之間。
和char、varchar比較起來。nchar、nvarchar則最多儲存4000個字元,不論是英文還是漢字;而char、varchar最多能儲存8000個英文,4000個漢字。能夠看出使用nchar、nvarchar資料類型時不用操心輸入的字元是英文還是漢字,較為方便,但在儲存英文時數量上有些損失。
補充:char(n)在讀取是知道字串的長度,能夠一次讀出。而varchar(n)就像C語言中的字串處理方式一樣,在末尾用‘\0‘來表示結尾。所以不能一次性讀出。須要一個一個字元讀出才幹知道在哪裡結束。
所以char類型的讀取速度比varchar類型的讀取速度快。
所以一般來說。假設含有中文字元,用nchar/nvarchar,假設純英文和數字,用char/varchar
我把他們的差別概括成:
CHAR, NCHAR 定長,速度快,占空間大。需處理
VARCHAR。NVARCHAR。TEXT 不定長,空間小,速度慢,無需處理
NCHAR、NVARCHAR、NTEXT處理Unicode碼
【本段摘自http://wenku.baidu.com/view/eee97bf5f61fb7360b4c652b.html僅供學習使用】
varchar在SQL Server中是採用單位元組來儲存資料的,nvarchar是使用Unicode來儲存資料的.中文字元儲存到SQL Server中會儲存為兩個位元組(一般採用Unico編碼)。英文字元儲存到資料庫中,假設欄位的類型為varchar,則僅僅會佔用 一個位元組 。而假設欄位的類型為nvarchar。則會佔用 兩個位元組 .
正常情況下,我們使用varchar 也能夠儲存中文字元 ,可是假設遇到作業系統是英文作業系統並且對中文字型的 支援不全面時 , 在SQL Server儲存中文字元為varchar就會出現亂碼(顯示為?
?).並且正常情況下。主機都會支援中文的環境,所以假設使用varchar來儲存資料。在開發階段是發現不了的.多數情況下,在布署的時候也不會有問題.
可是!
假設布署的主機是英文作業系統,並且不支援中文環境,那問題就出來了.全部的varchar欄位在儲存中文的時候都會變成亂碼(顯示為??).並且普通情況下你不會知道這是由於你採用了錯誤的資料類型來儲存所造成的,你會試著去裝中文字型,試著去設定作業系統的語言環境...這些都不能解決這個問題,唯一能解決這個問題的是把資料庫欄位的類型個性為nvarchar(或者nchar).對專案管理比較熟悉的朋友應該都知道,到布署階段再來改動資料庫是一個非常恐怖的事情.
使用nvarchar的還有一個很優點就是在推斷字串的時候能夠不須要考慮中英文兩種字元的區別.
當然,使用nvarchar儲存英文字元會增大一倍的儲存空間.可是在儲存代價已經非常低廉的情況下。優先考慮相容性會給你帶來很多其它優點的.
所以在Design的時候應該盡量使用nvarchar來儲存資料.僅僅有在你確保該欄位不會儲存中文的時候,才採用varchar來儲存.
補充:varchar(n)和nvarchar(n)都能處理中文,可是有些細節須要注意:當遇到中英文混合的情況時。varchar類型讀取時會每一個位元組去推斷究竟是一個英文字元還是等待和下一個位元組一起解析為一個中文字元,而nvarchar則不用,直接每次兩個位元組一起解析為一個Unicode字元。速度自己去體會了。
------------------------------------------------------------------------------------------------------------------------
總結:
1、varchar(n)括弧裡n限定的是能儲存的最大位元組數,nvarchar(n)括弧裡n限定的是能儲存的最大字元數。
2、varchar和nvarcahr使用情形:在字元中全是英文時使用varchar。全是中文是使用nvarchar,中英文混合時推薦使用nvarchar。
3、char和varchar使用情形:注重讀取效率時使用char(注意使用過程中要去除末尾空格)。注重使用空間時使用varchar。
資料庫基本經常使用類型解析