sql中varchar(max),取代text类型

摘要:
使用varchar(max)、nvarchar(max)和varbinary(max)数据类型,而不是text、ntext和image数据类型。Varchar(max)、nvarchar(max)和varbinary(max)统称为大值数据类型。当我今天阅读时,我发现了文本与varchar(max)和nvarchar(max)之间的区别。

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)上。

免责声明:文章转载自《sql中varchar(max),取代text类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇较好的第三方selenium显式等待的封装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

批量修改SQLServer数据库表字段属性

以下提供一些场景,各位举一反三自行发挥 修改所有varchar为nvarchar,同时保持字段长度一致 declare c_sql cursor for SELECT sql = 'alter table [' + d.name + '] alter column [' + a.name + '] nvarchar('+Conve...

Hive:ORC File Format存储格式详解

一、定义   ORC File,它的全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化。 据官方文档介绍,这种文件格式可以提供一种高效的方法来存储Hive数据。它的设计目标是来克服Hive其他格式的缺陷。 运用ORC File可以提高Hive的读、写以及处理数据的性能。和RCFile格式相比,ORC...

MySQL面试题收集

1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay...

sql2005分页

ALTER Procedure [dbo].[Pager2005] @TableName varchar(1000), --表名 @Fields varchar(5000) = '*', --字段名(全部字段为*) @OrderField varchar(5000), --排序字段(必须!支持多字段) @sqlWhere varchar(8000) =...

SQL 多条记录分组合成一条数据

要求 :1.回车空格消除。 2.进展情况相同的要去重 3.方括号内容要消除 4.按 年、月、任务编码 合并成一条数据 --创建该函数 nsc_StrSplit 传一个值 并按‘]’分隔成多条记录 存到一个表里 CREATE FUNCTION [dbo].[nsc_StrSplit] ( @str VARCHAR(4000) ) RETURNS @tab...

SQLServer中DataLength()和Len()两内置函数的区别

最近工作中遇到了个问题:在数据库中声明字段类型时char(4),但实际只存储了‘DCE’三个字母,程序中拼装以该字段作为key的Map中,会把‘DCE’+空格作为其Key,这样造成用没加空格的‘DCE’为key去取Value的值是取不出来的,结果是空。后来查看数据库字段类型才发现了问题所在。大家都知道,char和varchar的区别就在于一个是固定长度,一...