zoukankan      html  css  js  c++  java
  • nvarchar(MAX) 、ntext的差别

    今天在做一个项目时,程序成功向数据库插入一条数据,

    插入的是一篇比较大的文章,而且还有很多样式。 

    Id是int型,Content用的是 ntext类型的  

    但是当我在手动改数据库Id时出现错误:

    错误源:.NET.SqlClient Data Provider
    错误信息:将截断字符串或二进制数据。
    DBCC执行完毕。如果DBCC输出了错误信息,请与管理员联系。
    语句已终止。

    出现这个问题的直觉就是插入的数据超过了字段的实际长度。

    于是打开数据库修改,发现没有超过的啊?

    ntext在我的印象中应该算是最大的了。这样都不行吗?

    我又把content数据类型换成nvarchar(MAX),手动更改的时候成功了。

    在网上搜索的时候发现nvarchar(MAX) 、ntext是有差别的:

    以下转载:http://www.cnblogs.com/dudu/archive/2009/10/17/1585152.html

    NTEXT:

    默认情况下,NTEXT将文本数据存储在LOB结构中, 在表结构中只存储指针,指针指向该数据在LOB中的存储位置。

    NVARCHAR(MAX)

    默认情况下,不超过8,000字节的数据直接存储在表结构中,超过的才和NTEXT一样将数据存储在LOB结构中。

    NTEXT向NVARCHAR(MAX)的转换:

    ALTER TABLE 表名 ALTER COLUMN 字段名 NVARCHAR(MAX) null

    执行上面的SQL语句之后,虽然完成了转换,但数据的存储结构并没有改变,还是按照NTEXT的默认存储方式存储在LOB中。

    如何实现转换后数据按NVARCHAR(MAX)的方式进行存储呢?只需执行下面的语句:

    UPDATE 表名 SET 字段名 = 字段名

    比如:表名是Comment,字段名是Content,SQL语句就是: UPDATE Comment SET Content = Content

    实测数据:100条数据,耗时706秒。 

    NTEXT将在以后版本的SQL SERVER中不被支持,微软的文档中建议用NVARCHAR(MAX)取代NTEXT。

    ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead. 

    意思就是:

      Microsoft SQL Server 的未来版本中,将删除 ntext、 文本和 image 数据类型。 请避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。 使用 nvarchar (max)、 varchar (max) 和 varbinary (max) 来代替。
  • 相关阅读:
    一个总成本花费100W的失败项目的小小反省
    从绝望中寻找希望
    一个合格程序员该做的事情——你做好了吗?
    Go to 北京!
    深入浅出Oracle分析函数
    最适合web开发人员使用的速查表
    采用axis2c进行webservice发布的流程4在生成的代码中添加事务处理逻辑
    采用axis2c进行webservice发布的流程1
    rhel6.0及centos6.0 忘记root密码解决办法
    采用axis2c进行webservice发布的流程3通过wsdl文件,自动生成C的服务端代码
  • 原文地址:https://www.cnblogs.com/dinggf/p/11639640.html
Copyright © 2011-2022 走看看