【发布时间】:2013-08-29 17:59:54
【问题描述】:
我在 MS Access 2013 中创建了一个表,其中只有一列“长文本”类型(之前称为备忘录)并将其作为表的主键。我存储了一个包含 255 个以上字符的长字符串,然后我尝试存储另一个字符串,其前 255 个字符与之前存储的字符串相同,但前 255 个字符之后的所有其他字符都不同,并且 MS Access 给出了“重复数据”错误。在新字符串中,我使用不同的字符组合更改了第 255 位之后的字符,但都给出了错误。但是当我在第 255 个位置之前更改任何字符时,它不会给出任何错误。因此,我得出结论,MS Access 仅检查“长文本”数据类型的前 255 个字符以检查该列中的重复项。是这样吗?还有什么原因?
String 存储 256 个字符: Lorem Ipsumiss 只是印刷和排版行业的虚拟文本 Lorem Ipsum 自 1500 年代以来一直是行业标准的虚拟文本,当时一位不知名的印刷商使用打字机并对其进行编辑以制作类型样本书,它不仅幸存了五个世纪,而且还幸存了下来
字符串出错: Lorem Ipsumiss 只是印刷和排版行业的虚拟文本 Lorem Ipsum 自上世纪 500 年代以来一直是该行业的标准虚拟文本,当时一位未知的印刷商进行了打字并进行编辑以制作类型样本书,它不仅幸存了五个世纪,而且还幸存了 1
字符串出错: Lorem Ipsumiss 只是印刷和排版行业的虚拟文本 Lorem Ipsum 自上世纪 500 年代以来一直是该行业的标准虚拟文本,当时一位未知的印刷商进行了打字机并对其进行编辑以制作类型样本书,它不仅幸存了五个世纪,而且还幸存了 2
字符串出错: Lorem Ipsumiss 只是印刷和排版行业的虚拟文本 Lorem Ipsum 自上世纪 500 年代以来一直是该行业的标准虚拟文本,当时一位未知的印刷商进行了打字并加码编辑以制作类型样本书,它不仅存在了五个世纪,而且还存在于 lepintoelect123 中
不给出错误: Lorem Ipsumiss 只是印刷和排版行业的虚拟文本 Lorem Ipsum 自上世纪 500 年代以来一直是该行业的标准虚拟文本,当时一位未知的印刷商进行了打字并加码编辑以制作类型样本书,它不仅幸存了五个世纪,而且还幸存了 lepintoelec1
不给出错误: Lorem Ipsumiss 只是印刷和排版行业的虚拟文本 Lorem Ipsum 自上世纪 500 年代以来一直是行业标准的虚拟文本,当时一位未知的印刷商进行了打字机并对其进行编辑以制作类型样本书,它不仅幸存了五个世纪,而且还幸存了 lepintoelec2
不给出错误: Lorem Ipsumiss 只是印刷和排版行业的虚拟文本 Lorem Ipsum 自上世纪 500 年代以来一直是行业标准的虚拟文本,当时一位未知的印刷商进行了打字机并对其进行了编辑以制作类型样本书,它不仅幸存了五个世纪,而且还幸存了 lepintoelec3
请注意以上示例最后几个字符的不同。第一个存储的字符串有 256 个字符。即使该列不是主键,如果在该列的表设计中将“Indexed: Yes (no-duplicates) allowed”值设置为 true,问题仍然存在。
【问题讨论】:
-
附带问题:为什么要将 long text 字段设为主键?为什么不只使用自动编号字段?你真的要加入这个领域,还是试图将其限制为唯一的文本?
-
@LittleBobbyTables 是的,它是唯一的文本。即使它不是主键,如果在表设计中为该列设置了不允许重复的值,问题仍然存在。
-
索引备忘录字段是一个不稳定的提议。索引键仅使用备注字段值的前 255 个字符。
-
@HansUp 有什么解决办法吗?我正在存储 400-1000 个字符的长字符串唯一值。
-
抱歉,MS Access 对您来说没有好消息。如果我想膨胀 db 文件大小,我只会索引一个备忘录字段。 ;-) 我认为您真的想要一个能够正确支持全文搜索的数据库。访问只是没有削减它。