zoukankan      html  css  js  c++  java
  • SQL Server中Text和varchar(max) 区别

    SQL Server 2005之后版本:请使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型,而不要使用 text、ntext 和 image 数据类型。

    Microsoft SQL Server 2005 中引入了 max 说明符。此说明符增强了 varchar、nvarchar 和 varbinary 数据类型的存储能力。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个字节的数据。

    这几个数据类型在行为上和较小的数据类型 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)上。

  • 相关阅读:
    servlet规范
    Java --Servlet 32个经典问题
    TCP的三次握手与四次挥手理解及面试题(很全面)
    TCP‘三次握手’和‘四次挥手’(通俗易懂)
    leetcode:122. Best Time to Buy and Sell Stock II(java)解答
    STM32通过调用库函数进行编程
    Swift下调用Touch ID实现指纹识别
    SpringMVC+MyBatis+JMS+JTA(分布式事务)
    windows下的两个等待函数
    Ubuntu 14.04正式公布,一个不眠之夜
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/10481213.html
Copyright © 2011-2022 走看看