前言
前面幾篇文章我們講解了索引有關(guān)知識(shí),這一節(jié)我們?cè)倮^續(xù)我們下面內(nèi)容講解,簡短的內(nèi)容,深入的理解。
數(shù)據(jù)類型
SQL Server支持兩種字符數(shù)據(jù)類型,一種是常規(guī),另外一種則是Unicode。常規(guī)數(shù)據(jù)類型包括CHAR和VARCHAR,Unicode數(shù)據(jù)類型包括NCAHR和NVARCHAR。常規(guī)字符的每個(gè)字符使用1個(gè)字節(jié)存儲(chǔ),而Unicode數(shù)據(jù)的每個(gè)字符要求2個(gè)字節(jié)。常規(guī)字符列限制為僅僅只針對(duì)于英語,而Unicode則是針對(duì)于多種語言。兩種字符數(shù)據(jù)類型的文本表示方式也不相同,在表示常規(guī)字符文本時(shí),只需要使用單引號(hào),比如'Hello,my name is JeffckyWang,I'm from cnblogs',而對(duì)于Unicode字符文本時(shí),需要指定字符N作為前綴,即N‘Hello,my name is JeffckyWang,I'm from cnblogs’。
名稱中沒有VAR元素的任何數(shù)據(jù)類型(CHAR、NCHAR)具有固定長度,即SQL Server按照列定義大小保留行空間,而不是按照字符中的實(shí)際字符保留空間。比如某列定義大小為CHAR(25),則SQL Server在該行保留25個(gè)字符的空間,而不管存儲(chǔ)字符串的長度。
名稱中含有VAR元素的數(shù)據(jù)類型(VARCHAR、NVARCHAR)具有可變長度,即SQL Server根據(jù)存儲(chǔ)需要,在行中使用盡可能多的存儲(chǔ)空間存儲(chǔ)字符串,同時(shí)外加兩個(gè)額外的字節(jié)偏移數(shù)據(jù)。例如,如果將某列定義為VARCHAR(25),此時(shí)支持的最大字符數(shù)為25,但實(shí)際上按照字符串中實(shí)際字符確定存儲(chǔ)量。-摘抄自SQL Server 2012 T-SQL基礎(chǔ)教程。
這里關(guān)于Unicode字符數(shù)據(jù)類型我們需要重點(diǎn)理解下。我們現(xiàn)在一個(gè)表,如下:
CREATE TABLE UnicodeType ( firstname VARCHAR(5) NOT NULL, lastname NVARCHAR(5) NOT NULL );
此時(shí)我們手動(dòng)插入數(shù)據(jù),正常插入,如下:
INSERT dbo.UnicodeType ( firstname, lastname ) VALUES ( '11111', -- firstname - varchar(5) N'啊的發(fā)個(gè)好' -- lastname - nvarchar(5) )
字符都完全插入表中,如下:
此時(shí)我們將firstname,插入五個(gè)中文