nvarchar(max) 的大小限制,打印问题
Size limit for nvarchar(max) , Print issue
我想保存长度超过 43679 个字符的 XML 记录并将其保存到 table。
因为当我检查它的长度时,它给出了超过 43679 个字符,但是当我要读取或打印该列的数据时,它只显示 43679 个字符。
下图可以帮助您理解问题。
喜欢的例子
declare @t table (a nvarchar(max));
insert into @t (a) values (REPLICATE(CONVERT(nvarchar(max),'a'),200000));
select LEN(a) from @t -- result 200000
select print(a) from @t -- print only 43679 char.
请帮我摆脱这种情况。
NCHAR、NVARCHAR、NVARCHAR(MAX) 等数据类型存储一半的 CHAR、VARCHAR 和 NVARCHAR(MAX)。因为这些数据类型用来存储 UNICODE 字符。当您需要存储默认语言(排序规则)以外的数据时,请使用这些数据类型。 UNICODE 字符每个字符占用 2 个字节。这就是为什么 NCHAR、NVARCHAR、NVARCHAR(MAX) 的长度存储一半的 CHAR、VARCHAR 和 NVARCHAR(MAX)。
这是 SSMS 中的 well known bug,您不能从网格视图列中粘贴超过 43679 个字符,不幸的是,无法增加此限制,您可以通过在中显示数据来解决此问题Xml 格式而不是 nvarchar
SQL Server Management Studio 在打印到消息窗格时有字符限制。有一种解决方法可以满足您的需求。
使用 FOR XML 到 select 您的数据,您可以使用 TYPE 指定 [processing-instruction] 并为其命名。您的文本将显示为您可以打开的 link。此文本将包含包装器和您指定的名称。这是一个例子。
declare @t table (a nvarchar(max));
insert into @t (a) values (REPLICATE(CONVERT(nvarchar(max),'a'),200000));
select LEN(a) from @t -- result 200000
SELECT a [processing-instruction(TextOutput)] from @t FOR XML PATH(''), TYPE;
我想保存长度超过 43679 个字符的 XML 记录并将其保存到 table。 因为当我检查它的长度时,它给出了超过 43679 个字符,但是当我要读取或打印该列的数据时,它只显示 43679 个字符。
下图可以帮助您理解问题。
喜欢的例子
declare @t table (a nvarchar(max));
insert into @t (a) values (REPLICATE(CONVERT(nvarchar(max),'a'),200000));
select LEN(a) from @t -- result 200000
select print(a) from @t -- print only 43679 char.
请帮我摆脱这种情况。
NCHAR、NVARCHAR、NVARCHAR(MAX) 等数据类型存储一半的 CHAR、VARCHAR 和 NVARCHAR(MAX)。因为这些数据类型用来存储 UNICODE 字符。当您需要存储默认语言(排序规则)以外的数据时,请使用这些数据类型。 UNICODE 字符每个字符占用 2 个字节。这就是为什么 NCHAR、NVARCHAR、NVARCHAR(MAX) 的长度存储一半的 CHAR、VARCHAR 和 NVARCHAR(MAX)。
这是 SSMS 中的 well known bug,您不能从网格视图列中粘贴超过 43679 个字符,不幸的是,无法增加此限制,您可以通过在中显示数据来解决此问题Xml 格式而不是 nvarchar
SQL Server Management Studio 在打印到消息窗格时有字符限制。有一种解决方法可以满足您的需求。
使用 FOR XML 到 select 您的数据,您可以使用 TYPE 指定 [processing-instruction] 并为其命名。您的文本将显示为您可以打开的 link。此文本将包含包装器和您指定的名称。这是一个例子。
declare @t table (a nvarchar(max));
insert into @t (a) values (REPLICATE(CONVERT(nvarchar(max),'a'),200000));
select LEN(a) from @t -- result 200000
SELECT a [processing-instruction(TextOutput)] from @t FOR XML PATH(''), TYPE;