我刚刚将表中的nvarchar(MAX)字段更改为nvarchar(250)。 有人可以告诉我,如果输入的字符数超过250个,会如何处理?
答案 0 :(得分:3)
如果您已将列nvarchar(MAX)字段更改/更改为nvarchar(250),并且没有收到任何错误,则意味着行中没有包含超过250个字符的数据,这就是SQL Server成功更改列长度的原因并且您的数据是准确/完整的。
如果任何行包含超过250个字符,则SQL Server将给您一个错误,并且alter语句将失败。这意味着数据类型的长度不会改变。
Msg 8152,级别16,状态13,第12行字符串或二进制数据为 被截断。该声明已终止。
如果更改列长,如果SET ANSI_WARNINGS OFF
,则SQL Server将在没有任何警告的情况下更改列长,并且多余的数据将被截断。
默认情况下,警告用户SET ANSI_WARNINGS ON
。
我认为一旦数据被截断,以后就无法恢复。
答案 1 :(得分:0)
如果任何行超过新长度,系统应在更改列长度时阻止您或至少警告您可能丢失数据。
取决于DBMS和版本,您甚至可能无法更改列长。
但是,如果您没有说超过250行的话,那应该没有问题。
除非有权访问更改之前的数据库备份,否则无法恢复截断的数据
顺便提一句,无论您打算如何进行此更改,我都建议避免使用可变长度的列
MySQL会自动为可变长度列保留最大可能的长度,而不管一行是15个字符还是45或250。 可以想象,这最终会导致系统瓶颈。 (也许您没有足够大的数据库来显示效果,但是我的座右铭是“提前发出警告”)