SQL Server中Text、varchar(max)和varbinary(max)數據類型區別


  以前只知道text和image是可能被SQL Server淘汰的數據類型,但具體原因不太清楚,今天讀書的時候發現了text與varchar(max)和nvarchar(max)的區別,主要是對操作符的限制,text只能被下列函數作用:

函數 語句

DATALENGTH

READTEXT

PATINDEX

SET TEXTSIZE

SUBSTRING

UPDATETEXT

TEXTPTR

WRITETEXT

TEXTVALID

 

 

舉個列子,如果“文本”這一列的數據類型為text,那么它將不能用於“=”“left()”等操作,比如下面的例子:

建立表,填充數據:

if exists (select * from sysobjects where id = OBJECT_ID('[asdf]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

DROP TABLE [asdf]

CREATE TABLE [asdf] (

[inttest] [int] IDENTITY (1, 1) NOT NULL ,

[text] [text] NULL ,

[varcharmax] varchar(max) NULL )

ALTER TABLE [asdf] WITH NOCHECK ADD CONSTRAINT [PK_asdf] PRIMARY KEYNONCLUSTERED ( [inttest] )

 

SET IDENTITY_INSERT [asdf] ON

 

INSERT [asdf] ( [inttest] , [text] , [varcharmax] ) VALUES ( 1 , '1111111' , '1111111' )

 

SET IDENTITY_INSERT [asdf] OFF

運行查詢:

查詢一:
SELECT
[text]

      ,[varcharmax]

FROM [testDB].[dbo].[asdf]

where

[text] ='11111' AND

[varcharmax] = '1111111'


會出現以下錯誤提示:

消息402,級別16,狀態1,第1

數據類型text varchar equal to 運算符中不兼容。

查詢二:
SELECT
[text]

      ,[varcharmax]

FROM [testDB].[dbo].[asdf]

where

[varcharmax] = '1111111'


可以成功運行

 

在MS SQL2005及以上的版本中,加入大值數據類型(varchar(max)、nvarchar(max)、varbinary(max) )。大值數據類型最多可以存儲2^30-1個字節的數據。

這幾個數據類型在行為上和較小的數據類型 varcharnvarcharvarbinary 相同。

微軟的說法是用這個數據類型來代替之前的textntextimage 數據類型,它們之間的對應關系為:

varchar(max)-------text;

nvarchar(max)-----ntext;

varbinary(max)----image.

 

有了大值數據類型之后,在對大值數據操作的時候要比以前靈活的多了。比如:之前text是不能用‘like’的,有了varchar(max)之后就沒有這些問題了,因為varchar(max)在行為上和varchar(n)上相同,所以,可以用在varcahr的都可以用在varchar(max)上。

另外,這個還支持對插入的刪除的表中的大值數據類型列引用上使用 AFTER 觸發器。text就不行,總之,用了大值數據類型之后,我是“腰也不疼了,腿也不酸了,一口氣也能上六樓了”。還等什么呢,快用大值類型吧。

 

SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的區別

 對SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的一些概念一直很模糊,最近搜集一些資料,匯總如下,以便以后復習:

 一、char 和varchar的區別和應用:

     1.char和varchar的區別:

varchar   有指定的最大長度,這種類型的數據長度可變,但在最大長度之內,如果一個string 比最大長度小,那么它將逐字存儲而不多占額外的空間。 
char 是一個指定長度的類型的string,如果一個string 比設定的長度短,那么它將按照最長的長度來儲存,超出string部分,填補空格。 
     2.char和varchar的應用:

當你的string沒有固定長度的時候使用varchar(例如,姓名,城市,等等)。 
當你的string有固定長度的時候使用char(例如,電話號碼,區號,等等)。 

二、前面帶一個“n”的類型

      varchar/char前面帶一個“n”的類型,意味着既可以存放unicode 編碼的字符也可以存放非unicode編碼的字符。沒有“n”,則意味着只能存放unicode編碼的字符。

      如果你的數據庫里只有英文字符的話,那么使用nvarchar/nchar 或 varchar/char差別很小,如果處理不同國家的字符最好用nchar/nvarchar.

      什么是unicode編碼?

            簡單的說就是用兩個字節表示一個字符,這是針對各國文字、符號進行統一性編碼,unicode的主要用途是當你處理不同國家字符,比如日語或漢語。

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM