【问题标题】:Confused about nvarchar limit对 nvarchar 限制感到困惑
【发布时间】:2012-09-06 22:38:29
【问题描述】:

我有一个快速的问题,我无法在任何地方找到答案。我经常需要将一种类型的数据库转换为另一种类型,因此我正在编写一个程序来来回转换 MS SQL Server 数据库。我遇到的问题是我无法声明最大长度超过 4000 的 nvarchar 变量。我明白了,

“给参数'description'的大小(6000)超过了允许的最大值(4000)。”

然而,这在原始数据库中被明确定义为 nvarchar(6000),至少我认为是这样,因为 max_length 是 6000,如果你使用 max max_length 是 -1,对吧?我知道我可以只使用 nvarchar(max) 但如果我正在编写转换数据库的软件,我希望尽可能地保持原始状态。

最近更改了 nvarchar 最大限制还是我错过了某些设置?

【问题讨论】:

  • max_length 以字节为单位,而不是字符。 nvarchar(6000) 无效,因为 字符 限制为 4000。
  • 你可以有 1-4000,或者 Nvarchar 的最大值。也许您之前看到的是大小 - 由于 Nvarchar 存储 unicode 数据,它占用的空间是常规 varchar 的两倍 - 我预计您看到的是 Nvarchar(3000) - 大小将达到 6000。
  • 哦,当然,你是对的。最大长度显然是以字节为单位的,谢谢!
  • 是的,你是对的 - -1 = Column data type is varchar(max), nvarchar(max), varbinary(max), or xml. (msdn.microsoft.com/en-us/library/ms176106.aspx)

标签: sql-server


【解决方案1】:

给定的大小 (6000) 以字节为单位,而当您给出长度时,它以 unicode 的字符数为单位。限制 4000 是因为 nvarchar(xxxx) 和 nvarchar(max) 的内部存储不同。如果您想要超过 4000 个字符的存储空间,请使用 nvarchar(max)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    • 2020-04-16
    • 2023-03-08
    • 2019-08-04
    • 2019-12-30
    相关资源
    最近更新 更多