在数据库中将 nvarchar(MAX) 更改为 nvarchar(n)
Changing nvarchar(MAX) to nvarchar(n) in database
我刚刚将 table 中的一个 nvarchar(MAX) 字段更改为 nvarchar(250)。
有人可以告诉我如果条目超过 250 个字符,数据会发生什么情况吗?
我关心的不是可见数据,而是幕后发生的事情:
- 对超过容器限制的数据做了什么
数据?
- 我在一些地方读到 table 必须删除并重新创建。这是真的吗?为什么?我没有看到其他人收到的任何错误。
- 有没有办法在进行此更改后恢复截断的数据? (我不想做,但我很好奇)
如果任何行超过新长度,系统应该会阻止您或至少警告您在更改列长度时可能会丢失数据。
根据 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
警告用户。
我认为一旦数据被截断,以后就无法恢复。
我刚刚将 table 中的一个 nvarchar(MAX) 字段更改为 nvarchar(250)。 有人可以告诉我如果条目超过 250 个字符,数据会发生什么情况吗?
我关心的不是可见数据,而是幕后发生的事情:
- 对超过容器限制的数据做了什么 数据?
- 我在一些地方读到 table 必须删除并重新创建。这是真的吗?为什么?我没有看到其他人收到的任何错误。
- 有没有办法在进行此更改后恢复截断的数据? (我不想做,但我很好奇)
如果任何行超过新长度,系统应该会阻止您或至少警告您在更改列长度时可能会丢失数据。
根据 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
警告用户。
我认为一旦数据被截断,以后就无法恢复。