在数据库中将 nvarchar(MAX) 更改为 nvarchar(n)

Changing nvarchar(MAX) to nvarchar(n) in database

我刚刚将 table 中的一个 nvarchar(MAX) 字段更改为 nvarchar(250)。 有人可以告诉我如果条目超过 250 个字符,数据会发生什么情况吗?

我关心的不是可见数据,而是幕后发生的事情:

如果任何行超过新长度,系统应该会阻止您或至少警告您在更改列长度时可能会丢失数据。

根据 DBMS 和版本,您甚至可能无法更改列长度。

但是,如果您没有像您所说的那样超过 250 行,那么应该没有问题。

除非您有权访问更改前的数据库备份,否则无法恢复截断的数据

附带说明一下,无论您打算如何处理该更改,我都建议避免使用可变长度的列

MySQL 自动为可变长度列保留最大可能长度,无论一行是 15 个字符还是 45 或 250。 可以想象,这最终会导致系统出现瓶颈。 (也许你没有足够大的数据库来显示效果,但我的座右铭是 "forewarned is forearmed" )

如果您将 altered/changed 列 nvarchar(MAX) 字段转换为 nvarchar(250) 并且您没有收到任何错误,这意味着行上的 none 包含超过 250 个字符的数据为什么 SQL 服务器成功更改了列长度并且您的数据是 accurate/complete.

如果任何一行包含超过 250 个字符,那么 SQL 服务器将给您一个错误并且 alter 语句将失败。这意味着数据类型长度不​​会改变。

Msg 8152, Level 16, State 13, Line 12 String or binary data would be truncated. The statement has been terminated.

如果 SET ANSI_WARNINGS OFF 更改列长度,则 SQL 服务器将在没有任何警告的情况下更改列长度,并且多余的数据将被截断。

默认为SET ANSI_WARNINGS ON警告用户。

我认为一旦数据被截断,以后就无法恢复。