指定列长度有哪些好的经验法则?人们将任意使用“VARCHAR(50)”作为名称字段等......但大多数都是猜测工作。有没有人有他们使用的资源?您指定字符长度的经验法则是什么?例如,对于URL - 这些可能很长,特别是在给定最大长度查询字符串的情况下 - 但是使用VARCHAR(MAX)似乎在顶部,即使使用VARCHAR只会占用实际字符串数据所需的空间。
请建议/分享 -
答案 0 :(得分:3)
用于URL和电子邮件地址等内容的RFC可能很有用。 URL的字符数限制为2083,而电子邮件地址的最大长度为320个字符(名称为64个,@为1个,域为255个)。
一般来说,对于存储用户数据的任何内容,我都会“太长”。对于内部使用,我试图限制更多。我通常使用50表示密钥,255表示描述,依此类推。除非您正在进行搜索或其他事情,否则您不会对性能产生太大影响,因此很多这些选择都取决于您的个人偏好。
简而言之:
答案 1 :(得分:1)
通常我会考虑我能想到的最长数据条目的预期长度,然后通常会增加10-20%作为起点,除非我知道数据有指定的限制(邮政编码有一个例如,指定长度)我使用它。如果硬限制的长度(它必须是那个长度而不是其他,我使用Char数据类型,否则我使用varchar或nvarchar作为字符串数据。
答案 2 :(得分:0)
至少在mysql中,VARCHAR字段的开销是一个字节,最大宽度最多255个字节,或两个字节,任何更大的最大宽度。因此,当您不希望数据超过255个字节或VARCHAR(65535)在其他地方时,一个好的经验法则是使用VARCHAR(255)。
当然,如果您希望数据存在真正的硬限制,您可能希望在列定义中设置限制以充当第二级数据验证(但是如果它足够远以导致数据数据库错误,应该被认为是较高级别的错误。)
答案 3 :(得分:0)
对于URL我会查询RFC的URL。名字和姓氏我通常用100个字符 - 因为你说过它并不重要,因为(N)VARCHAR只占用它所需要的空间。
我倾向于做的事情:
答案 4 :(得分:0)
小心谨慎,但保守,可以让你以后扩展,从很长的时间开始可能会引入未知的性能和使用 - 并且可能会使以后很难减少。
你会不确定有很多很多很多专栏?以后改变它们会是一项可怕的任务吗?如果没有,那么保守一点,如果你达到极限,那么你可以扩展 - 只要记住你不希望这些约束遍布你的代码;尽可能集中他们,并在需要时强制执行。
尝试选择比预期更长的长度,但并非完全没有问题。如果你认为这是一个合理的领域那么它就是50;如果150似乎是正确的,那么让它200.
通常我们将nvarchar(100)用于名称,255用于URL或其他可能变长的字段(这些通常只是域名,而不是站点特定页面/资源的完整URL)。我们的大型机施加了类似的限制,每年我们都会进行一些现场扩展 - 但是我们期望这样做并且修改它们并不是什么大问题。
答案 5 :(得分:0)
你想要优化什么?正如指出的那样,常规VARCHAR在成本上没有太大差异,因此不值得花费很多努力。您可能关心的另一个原因是某种验证规则,在这种情况下,您需要弄清楚确定字段值是否有效的原因。然后申请。