Ms access 当长文本/备忘字符串是主键字段或“0”时,将其截断为255个字符;索引:是(不允许重复)";
我在MS Access 2013中创建了一个表,其中只有一列是“长文本”类型(前面称为Memo),并将其作为表的主键。我存储了一个包含255个以上字符的长字符串,然后尝试存储另一个字符串,该字符串的前255个字符与以前存储的字符串相同,但前255个字符之后的所有其他字符都不同,MS Access出现“重复数据”错误。在新字符串中,我更改了第255位之后的字符,使用了不同的字符组合,所有字符都给出了错误。但是,当我更改第255个位置之前的任何字符时,它不会给出任何错误。因此,我得出结论,MS Access只检查“长文本”数据类型的前255个字符,以检查该列中的重复项。是这样吗?还有什么原因呢 存储256个字符的字符串: LoreMip Summary Summary印刷和排版行业摘要自1500年以来一直是我的文本的行业标准,现在还没有关于字体和拼图编辑的国际图书目录,所以我的文本不仅存活了五个世纪,而且还存活了两个世纪 字符串错误: LoreMip Summary Summary印刷和排版行业摘要自1500年以来一直是我的文本的行业标准,在未知的情况下,我的文本和拼图编辑器的打印和排版不仅存活了五个世纪,而且还存活了两个世纪 字符串错误: LoreMip Summary Summary印刷和排版行业摘要自1500年以来一直是我的文本的行业标准,在未知的国际图书目录中,我的文本和拼图编辑使特定的图书不仅存活了五个世纪,而且还存活了其他两个世纪 字符串错误: LoreMip Summary Summary印刷和排版行业摘要自1500年起一直是我的文本的行业标准,在未知的情况下,我的文本和拼图编辑器的打印和排版不仅存活了五个世纪,而且还存活了两个世纪123 没有给出错误: LoreMip Summary Summary印刷和排版行业摘要自1500年起一直是我的文本的行业标准,在未知的国际图书目录中,我的文本和拼图编辑使特定的图书不仅存活了五个世纪,而且还存活了五个世纪 没有给出错误: LoreMip Summary Summary印刷和排版行业摘要自1500年以来一直是我的文本的行业标准,在未知的国际图书目录中,我的文本和拼图编辑器不仅存活了五个世纪,而且还存活了五个世纪 没有给出错误: LoreMip Summary Summary印刷和排版行业摘要自1500年起一直是我的文本的行业标准,在不知道的情况下,我的文本和拼图编辑的IntertoKagalleyof Types Bookit不仅存活了五个世纪,而且还存活了三个世纪Ms access 当长文本/备忘字符串是主键字段或“0”时,将其截断为255个字符;索引:是(不允许重复)";,ms-access,ms-access-2013,Ms Access,Ms Access 2013,我在MS Access 2013中创建了一个表,其中只有一列是“长文本”类型(前面称为Memo),并将其作为表的主键。我存储了一个包含255个以上字符的长字符串,然后尝试存储另一个字符串,该字符串的前255个字符与以前存储的字符串相同,但前255个字符之后的所有其他字符都不同,MS Access出现“重复数据”错误。在新字符串中,我更改了第255位之后的字符,使用了不同的字符组合,所有字符都给出了错误。但是,当我更改第255个位置之前的任何字符时,它不会给出任何错误。因此,我得出结论,MS Ac
请注意以上样本最后几个字符的差异。第一个存储的字符串有256个字符。即使该列不是主键,如果在该列的表设计中将“Indexed:Yes(no duplicates)allowed”(索引:允许重复)值设置为true,则问题仍然存在。正如@HansUp在注释中所述,Access(特别是Jet/ACE db引擎)仅使用备忘录/长文本字段的前255个字符来创建其索引。因此,它只使用前255个字符来强制执行无重复 @HansUp建议使用一个不同的db引擎,为长字符串和全文搜索提供更好的支持,这可能是最好的方法,但我知道通常还有其他考虑因素限制您解决Access中的问题 因此,这里有一个解决您的问题的只允许访问的方法。这假设您在评论中列出的要求是有效的;i、 例如,您需要存储400到1000个字符之间的唯一字符串
备选案文1
备选案文2: 保持当前设置并在代码级别强制唯一性。每次更新或插入注释时,都要搜索与前255个字符匹配的所有注释,读取值并在代码中执行比较
备选方案3(感谢@HansUp在评论中提出这一点):
- 很容易证明,两个不同的字符串可能会生成相同的哈希(冲突)。然而,使用好的散列算法将使实际概率接近零
- 这提供了各种散列算法的一些VB6/VBA/VBScript实现。我不能保证他们的正确性,但他们为我通过了视力测试。使用风险自负,但这至少是一个良好的起点
- 实际上,在给定任意大的输入时,可以使用任何返回255个字符或更少字符串的函数。蹩脚的散列算法和好的散列算法之间的区别在于它如何将冲突最小化。因此,我建议您使用基于流行标准的标准。