日期:2014-05-16  浏览次数:20352 次

请问,原来的数据类型是 nvarchar(255),后来知道255是字符长度,觉得用不了那么多,想改变成10,请问,会丢失数据吗?谢谢
请问,
1.  原来的数据类型是 nvarchar(255),后来知道255是字符长度,觉得用不了那么多,想改变成10,请问,会丢失数据吗?(当然字段中没有没有超过10的字符长度)
2.  另问,如果扩大这个数字,比如从255改成4000,是否会改变原来的数据呢?谢谢!
3.  如果字段中的字符长度没有问题,那么修改该字段的数据类型,在nvarchar(n)、nvarchar(max)、nText 之间切换,有没有问题啊?
谢谢!
------解决方案--------------------
1.如果确实没有数据问题,那么不会丢失数据
2.缩小都不会跨大也不会
3.在数据问题的前提下,长短可以切换,但数据类型就不是都可以随意切换的
------解决方案--------------------
1.  原来的数据类型是 nvarchar(255),后来知道255是字符长度,觉得用不了那么多,想改变成10,请问,会丢失数据吗?(当然字段中没有没有超过10的字符长度)

不会

2.  另问,如果扩大这个数字,比如从255改成4000,是否会改变原来的数据呢?谢谢!

不会,nvarchar本身就是变长的,数据没有变化,长度实际上也没有变化

3.  如果字段中的字符长度没有问题,那么修改该字段的数据类型,在nvarchar(n)、nvarchar(max)、nText 之间切换,有没有问题啊?

修改字段的长度,在上面的条件下,不会有啥变化,变化的是针对后续数据的长度,以及前台应用程序的匹配。

另外,ntext 和nvarchar(max) 是有差别的。

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

NVARCHAR(MAX)

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

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

------解决方案--------------------
不会改变原来的数据,如果你修改为10,但是你的资料中有长度超过10的,会报错修改失败
------解决方案--------------------
建议不用改,变长数据有多少存多少,不超过定义就可以了