首页 > 解决方案 > Varchar 到 nvarchar 不改变长度

问题描述

我有这个表,它为 varchar(255) 类型的 sub_id 列中的每一行存储一个 id,sql server。其他列存储 unicode,因此这些列是 nvarchar。现在,出于某种原因,我需要将 sub_id 更新为 nvarchar。我运行了以下命令:

 ALTER TABLE TABLE_NAME ALTER COLUMN SUB_ID NVARCHAR(255)

这更改了列类型,但将长度设置为 510。我不想更改列的长度。如果我必须提到,表有很多数据,并且 sub_id 的长度永远不会超过 20。

我读到了这一点,但无法弄清楚如何截断该列的长度。

以下是 sp_help 上提到的表的快照(subject_id 是 sub_id)

在此处输入图像描述

标签: sql-serverdatabaseunicodealter-tablenvarchar

解决方案


当您查看时sp_help,长度表示以下内容(sp_help (Transact-SQL)):

Length smallint 数据类型的物理长度(以字节为单位)。

这并不意味着以字符为单位的列的长度。

单个nvarchar字符的大小为 2 个字节,而不是一个。列的最大长度没有改变,但它的字节大小改变了。

如果您希望列的数据大小保持不变,则必须将该列设为nvarchar(127)/ nvarchar(128)(大小为 254/256 字节),并截断您的值。


推荐阅读