【问题标题】:How to resolve the error "The index entry of length 904 bytes for the index 'IX_companyinfo_exhibition' exceeds the maximum length of 900 bytes."如何解决错误“索引'IX_companyinfo_exhibition'的长度为904字节的索引条目超过了最大长度900字节。”
【发布时间】:2018-02-22 11:42:58
【问题描述】:

我得到的错误是:

“索引‘IX_companyinfo_exhibition’的长度为904字节的索引条目超过了最大长度900字节”。

exblist nvarchar(600),我将其更改为nvarchar(450)。我删除了索引ie.IX_companyinfo_exhibition

我什么都试过了。即使我用过这个:

CREATE NONCLUSTERED INDEX IX_companyinfo_exhibition ON dbo.companyinfo(exblist) include(companyname,website,country,contactperson,telphone)

我不知道这有什么问题。我仍然遇到同样的错误。

【问题讨论】:

标签: c# sql sql-server


【解决方案1】:

Based on SQL Server documentationnvarchar(450) 应该可以工作。

我确实发现“904”令人困惑。 nvarchar(450) 的实际大小为 902 字节(请参阅 here)。毫无疑问,额外的两个字节来自某个地方。

所以,您应该可以使用nvarchar(448) 解决此问题。

如果不可能,您可以添加另一列和索引:

alter t add exblist448 as (left(exblist, 1, 448))

然后索引这个。

说了这么多,我不认为这会解决你的真正的问题。我不明白为什么需要 450 个字符的字符串上的索引。我也不明白为什么列名会包含“列表”。

我强烈怀疑您确实需要第二张表,每个列表项和公司都有一行。或者,您需要一个全文索引。

【讨论】:

  • ...当我尝试插入一些电子邮件 ID 时,它会抛出具有不同数字的错误...有时它是 904...有时它是 908...取决于输入的电子邮件 ID...对于一些输入的电子邮件 ID 可以正常插入...
  • @chetankambli 。 . .正如怀疑的那样。首先,您真的不想将电子邮件 ID 放在单个列中。每个电子邮件 ID 有一行的单独表格是正确的方法。其次,列上的索引不会很有帮助。
  • @Gordon...如果我要删除该索引(即 IX_companyinfo_exhibition),那么该错误不应该出现...对吗?
  • @gordon....ibb.co/hMwWkx....... 这是我输入 emailid 的链接(即 info@pakona.com),然后我点击保存按钮并然后我收到“904 超出大小限制 900”的错误......所以如果我从 info@pakona.com 中删除 na 或 a ......它正在保存而不是抛出那个错误......
  • @GordonLinoff 实际上我已经在他的第一个问题上向他提到了这一点stackoverflow.com/a/48878560/2705620
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 2015-02-02
  • 2011-04-26
  • 2018-04-11
  • 2015-06-23
  • 1970-01-01
相关资源
最近更新 更多