从Varchar到nvarchar的长度不变

我有这张表,它在SQL Server varchar(255)类型的sub_id列中存储每一行​​的ID。其他列存储unicode,因此它们是nvarchar。现在由于某些原因,我需要将sub_id更新为nvarchar。我运行了以下命令:

this.facebook.api("/114987089875646/feed",["manage_pages","publish_pages"])

这更改了列的类型,但将长度设置为510。我不想更改列的长度。不得不提的是,表中包含大量数据,并且sub_id的长度永远不会超过20。

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

以下是来自sp_help的有关表的快照(subject_id为sub_id)

从Varchar到nvarchar的长度不变

qq19141221 回答:从Varchar到nvarchar的长度不变

NVARCHAR的大小为255,每个字符占用2个字节的空间,这就是将DATALENGTH显示为510

的原因。
DECLARE @string NVARCHAR(20)  
SET @string = 'Robin'  
SELECT @string AS 'String',DATALENGTH(@string) AS 'Datalength',LEN(@string) AS 'Len' 

enter image description here

与上面的输出一样,您将观察到DATALENGTH列仅显示10作为值。那是因为每个字符占用2个字节的空间,而数据长度只有5个字符,因此它将在数据库中占用10个字节的空间。

,

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

  

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

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

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

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

本文链接:https://www.f2er.com/3153147.html

大家都在问