[英]Changing nvarchar(MAX) to nvarchar(n) in database
我刚刚将表中的nvarchar(MAX)字段更改为nvarchar(250)。 如果有超过250个字符的条目,有人可以告诉我数据会发生什么变化吗?
如果您已将列nvarchar(MAX)字段更改/更改为nvarchar(250)并且您没有收到任何错误,则表示行上没有包含超过250个字符的数据,这就是SQL Server成功更改列长度和数据的原因准确/完整。
如果任何行包含超过250个字符,那么SQL服务器将给您一个错误,并且alter语句将失败。 这意味着不会更改数据类型长度。
消息8152,级别16,状态13,行12字符串或二进制数据将被截断。 该语句已终止。
如果SET ANSI_WARNINGS OFF
则更改列长度,然后SQL Server将更改列长度而不发出任何警告,并且将截断额外数据。
默认情况下,它是SET ANSI_WARNINGS ON
以警告用户。
我认为一旦数据被截断,以后就无法恢复。
如果任何行超过新长度,系统应该阻止您或至少警告您在更改列长度时可能丢失数据。
根据DBMS和版本,您甚至可能无法更改列长度。
但是,如果你没有超过250的行,正如你所说,那么应该没有问题。
除非您可以访问更改之前的数据库备份,否则无法恢复截断的数据
在旁注中,无论您打算如何处理该更改,我都应该建议避免使用可变长度的列
MySQL会自动为可变长度列保留最大可能长度,无论行是15个字符还是45个或250个。这可以想象,最终会导致系统出现瓶颈。 (也许你没有一个足够大的数据库来显示效果,但我的座右铭是“预先警告是预先设定的”)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.