字符列长度

时间:2009-05-04 22:38:21

标签: sql database-design

指定列长度有哪些好的经验法则?人们将任意使用“VARCHAR(50)”作为名称字段等......但大多数都是猜测工作。有没有人有他们使用的资源?您指定字符长度的经验法则是什么?例如,对于URL - 这些可能很长,特别是在给定最大长度查询字符串的情况下 - 但是使用VARCHAR(MAX)似乎在顶部,即使使用VARCHAR只会占用实际字符串数据所需的空间。

请建议/分享 -

6 个答案:

答案 0 :(得分:3)

用于URL和电子邮件地址等内容的RFC可能很有用。 URL的字符数限制为2083,而电子邮件地址的最大长度为320个字符(名称为64个,@为1个,域为255个)。

一般来说,对于存储用户数据的任何内容,我都会“太长”。对于内部使用,我试图限制更多。我通常使用50表示密钥,255表示描述,依此类推。除非您正在进行搜索或其他事情,否则您不会对性能产生太大影响,因此很多这些选择都取决于您的个人偏好。

简而言之:

  1. 此数据存在规范(URL,电子邮件地址等):准确无误
  2. 用户数据:为名称之类的内容做多,为评论文本等内容设置合理的限制
  3. 内部使用:无论什么漂浮在你的船上

答案 1 :(得分:1)

通常我会考虑我能想到的最长数据条目的预期长度,然后通常会增加10-20%作为起点,除非我知道数据有指定的限制(邮政编码有一个例如,指定长度)我使用它。如果硬限制的长度(它必须是那个长度而不是其他,我使用Char数据类型,否则我使用varchar或nvarchar作为字符串数据。

答案 2 :(得分:0)

至少在mysql中,VARCHAR字段的开销是一个字节,最大宽度最多255个字节,或两个字节,任何更大的最大宽度。因此,当您不希望数据超过255个字节或VARCHAR(65535)在其他地方时,一个好的经验法则是使用VARCHAR(255)。

当然,如果您希望数据存在真正的硬限制,您可能希望在列定义中设置限制以充当第二级数据验证(但是如果它足够远以导致数据数据库错误,应该被认为是较高级别的错误。)

来源:http://dev.mysql.com/doc/refman/6.0/en/char.html

答案 3 :(得分:0)

对于URL我会查询RFC的URL。名字和姓氏我通常用100个字符 - 因为你说过它并不重要,因为(N)VARCHAR只占用它所需要的空间。

我倾向于做的事情:

  • 我通常会使用NVARCHAR而不是VARCHAR作为名称,因为很多名字需要特殊字符。
  • 我确保无论我在数据库中选择的长度如何,我都会在UI中强制执行。

答案 4 :(得分:0)

小心谨慎,但保守,可以让你以后扩展,从很长的时间开始可能会引入未知的性能和使用 - 并且可能会使以后很难减少。

你会不确定有很多很多很多专栏?以后改变它们会是一项可怕的任务吗?如果没有,那么保守一点,如果你达到极限,那么你可以扩展 - 只要记住你不希望这些约束遍布你的代码;尽可能集中他们,并在需要时强制执行。

尝试选择比预期更长的长度,但并非完全没有问题。如果你认为这是一个合理的领域那么它就是50;如果150似乎是正确的,那么让它200.

通常我们将nvarchar(100)用于名称,255用于URL或其他可能变长的字段(这些通常只是域名,而不是站点特定页面/资源的完整URL)。我们的大型机施加了类似的限制,每年我们都会进行一些现场扩展 - 但是我们期望这样做并且修改它们并不是什么大问题。

答案 5 :(得分:0)

你想要优化什么?正如指出的那样,常规VARCHAR在成本上没有太大差异,因此不值得花费很多努力。您可能关心的另一个原因是某种验证规则,在这种情况下,您需要弄清楚确定字段值是否有效的原因。然后申请。