SQL Server中Text和varchar(max)数据类型区别
以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与varchar(max)和nvarchar(max)的区别,主要是对操作符的限制,text只能被下列函数作用:
举个列子,如果“文本”这一列的数据类型为text,那么它将不能用于“=”“left()”等操作,比如下面的例子:
建立表,填充数据:
ifexists(select*fromsysobjectswhereid=OBJECT_ID('[asdf]')andOBJECTPROPERTY(id,'IsUserTable')=1)
DROPTABLE[asdf]
CREATETABLE[asdf](
[inttest] [int]IDENTITY(1,1)NOTNULL,
[text] [text]NULL,
[varcharmax]varchar(max)NULL)
ALTERTABLE[asdf]WITHNOCHECKADDCONSTRAINT[PK_asdf]PRIMARYKEYNONCLUSTERED([inttest])
SETIDENTITY_INSERT[asdf]ON
INSERT[asdf]([inttest],[text],[varcharmax])VALUES(1,'1111111','1111111')
SETIDENTITY_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 SQL及以上的版本中,加入大值数据类型(varchar(max)、nvarchar(max)、varbinary(max) )。大值数据类型最多可以存储2^30-1个字节的数据。
这几个数据类型在行为上和较小的数据类型varchar、nvarchar和varbinary相同。
微软的说法是用这个数据类型来代替之前的text、ntext和image数据类型,它们之间的对应关系为:
varchar(max)-------text;
nvarchar(max)-----ntext;
varbinary(max)----image.
有了大值数据类型之后,在对大值数据操作的时候要比以前灵活的多了。比如:之前text是不能用‘like’的,有了varchar(max)之后就没有这些问题了,因为varchar(max)在行为上和varchar(n)上相同,所以,可以用在varcahr的都可以用在varchar(max)上。
另外,这个还支持对插入的和删除的表中的大值数据类型列引用上使用 AFTER 触发器。text就不行,总之,用了大值数据类型之后,我是“腰也不疼了,腿也不酸了,一口气也能上六楼了”。还等什么呢,快用大值类型吧。
原著:/jhxk/articles/1633578.html 注意:本文只是为了本人以后的方便而存在了这里,若有著作权问题,请联系本人将该文删除。