问题 Ms-Access:任何需要具有可变长度文本字段的小尺寸


在Ms-Access MDB中,它是否会节省磁盘空间以限制可变长度文本字段的大小?

例如。如果我有一个可变长度 Text 大小的领域 20 并且该字段的所有实际值都在 10 人物,我在浪费空间吗?

将字段的大小设置为是否更好? 10,还是没有任何区别?


3402
2017-07-21 02:20


起源

目前尚不清楚你是否真的拥有Access或只是使用MDB文件,但如果你有Access,我强烈建议你利用这个方便的小东西称为帮助文件。你可能会惊讶于你在那里可以学到什么。 - David-W-Fenton
@David:它有什么区别?这个问题适用于两种情况。我认为这个问题不会包含在帮助文件中。 - CJ7
你自己看过帮助文件了吗?如果没有,看看,然后回到我们身边。 - David-W-Fenton
我不明白这个问题是如何回答的。是什么定义了“一个好主意?”您确定它是否有用/有用等等的基准是什么?在我看来,这只是一个措辞不足以让赏金得到帮助的问题。 - David-W-Fenton
@David:问题在于是否建议减小MDB中可变长度文本字段的大小。一个好的答案将涵盖可能发挥作用的所有因素。 - CJ7


答案:


如果我有一个大小为20的可变长度文本字段,并且该字段的所有实际值都不到10个字符,那么我是否在浪费空间?

没有。

将字段的大小设置为10,或者它没有任何区别会更好吗?

如果超过10个字符的值不可接受,最好将10设置为字段大小限制。如果用户可以输入11到20个字符之间的值,则将限制保留为20.在这种情况下,磁盘空间使用不会出现问题。


8
2017-07-26 13:26



即使该领域是PK的一部分?在这种情况下,是否会产生性能和尺寸影响? - Patrick Honorez
我的意思是:表客户有一个主键= CustId Text(50)。 CustID永远不会超过10个字符。通过将CustId字段设置为Text(10),db会更快更小吗? - Patrick Honorez
@iDevlop我怀疑它会对索引大小产生影响,因为我认为索引“填充”字段值不超过允许的字段宽度。我不知道性能影响。 - HansUp


虽然没有明确说明,但我认为您要问的是,数据存储与可变长度字符串的限制存在差异:使用更大或更小的限制没有区别。从MSDN,讨论JET的TEXT数据类型(Access中的db引擎)

通常,文本字段最多可包含255个字符,   [...]此外,未保留未使用的文本字段部分   记忆。


4
2017-07-23 17:33





字段存储为可变长度,因此将大小设置为255或10将不会减小或更改数据文件的大小。


3
2017-07-21 04:15





我认为当内存价格昂贵时,这是一个遗留物。

您可以将其用作数据验证的方法,即如果该字段包含电话号码,则给出10的长度将阻止输入无效和国际电话号码。


0
2017-07-21 15:44



UI不会验证输入吗? - CJ7
虽然利用UI提供的用于验证用户输入的任何工具来利用自己是明智的,但数据库引擎本身应该尽可能多地强制输入有效数据。选择字段长度是这样做的引擎级工具之一。 - David-W-Fenton
@David:UI应该在进入数据库之前验证任何输入 - CJ7
认为没有必要限制列的大小,正如你的答案似乎暗示的那样,与另一个问题有关:首先是数据库还是应用程序? stackoverflow.com/questions/3305958/... - pascal
是的,UI应该在到达数据库之前验证所有输入。但是数据库还应该具有防止无效数据的验证规则和索引。您不知道所有数据输入/编辑都将通过您创建的应用程序,并且您无法保证在UI验证中不会出现错误,或者以其他方式引入错误。你需要腰带和吊带,否则你的应用很弱。 - David-W-Fenton


应该适当选择字段的长度,因为它对索引性能和存储有影响,因为较长的值会产生更多的数据页。当然,如果数据是真实的,即实际值需要那么长,那么你需要它。因此,如果您有一个50个字符的字段,并且最长的值是10个字符,则索引将不会占用比该字段为10个字符更多的空间。

但是,选择适当的限制有助于设计表单和报告 - 如果您将字段设置得太长,则最终可能会出现无法正确显示/打印的异常值记录。另一方面,您不希望它太短,以至于用户无法在其中放入正常数据。字段长度是数据验证的最基本形式,因为您要确定该字段的适当值范围。

我的基本原则是我为具有常规格式的数据选择尽可能短的字段长度(即使它偶尔有例外),但是对于没有的字段,我很慷慨。


-4
2017-07-21 18:05



请详细说明它如何影响存储。 - CJ7
特别是索引存储:“更广泛”的索引会占用更多的数据页,因此会更快地碎片化,从而降低性能。较窄的索引可以更快地搜索,因为它的数据更少。 - David-W-Fenton
任何参考?看起来奇怪的是索引空间与列定义有关,而与列的实际用法无关。 - pascal
你是对的,@ pascal。您可以使用索引定义一个100个字符的列,但如果最大长度为10,则索引可能不会占用比您的列设置为10更多的空间。但是,如果有的话,我不会感到惊讶没有与在具有如此多潜在冗余空间的列上建立索引相关的性能问题,但我没有关于这一点的文档,这些年来与Jet合作只是一种直觉。就像强大的数据打字一样,它对我来说似乎是一个很好的设计。 - David-W-Fenton