SQL Server中Text和varchar(max) 區別

SQL Server中Text和varchar(max) 區別

分類: MSSQL數據庫 245人閱讀 評論(0) 收藏 舉報

SQL Server 2005之後版本:請使用 varchar(max)、nvarchar(max) 和 varbinary(max) 數據類型,而不要使用 text、ntext 和 image 數據類型。

Microsoft SQL Server 2005 中引入了 max 說明符。此說明符增強了 varcharnvarcharvarbinary 數據類型的存儲能力。varchar(max)nvarchar(max)varbinary(max) 統稱爲大值數據類型。您可以使用大值數據類型來存儲最大爲 2^31-1 個字節的數據。

 

以前只知道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 KEY NONCLUSTERED( [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個字節的數據。

這幾個數據類型在行爲上和較小的數據類型 varcharnvarchar varbinary 相同。

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

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

nvarchar(max)-----ntext;

varbinary(max)----image.

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章