CharField max_length 2 ^ n vs 2 ^ n-1

时间:2011-08-29 16:35:18

标签: python database django

为什么使用max_length的CharField等于2 ^ n而其他人使用2 ^ n-1?

例如:

  • 在django.contrib.gis.db.backends.postgis.models(django 1.3)中:

    class SpatialRefSys(models.Model, SpatialRefSysMixin):
        srtext = models.CharField(max_length=2048)
    
  • 在django_openid_auth.models中(djano-openid-auth 0.3):

    class Nonce(models.Model):
        server_url = models.CharField(max_length=2047)
    

虽然这不是科学衡量标准,2048 seems to be more popular than 2047,但是255 is more popular than 256。 Django文档说,在MySQL max_length is restricted to 255 characters if you are using unique=True中。但是为什么我会在其他情况下使用2 ^ n-1而不是2 ^ n?

1 个答案:

答案 0 :(得分:6)

你大多都得到了它。它不仅仅是255的unique = True参数,而且长达255的字符串也可以sometimes be stored more efficiently

所以答案是可能要为255和256做点,但对于其他长度,它很可能毫无意义。由于科学原因,我们大多数人都没有真正开始测试我们的512长场使我们的应用程序的运行速度明显快于513长的场地。

也就是说,可能存在特定于应用程序的情况,其中Django应用程序是C应用程序的前端,其中具有N ^ 2-1字符串对于有效存储附加终止\0而言更有用。字节。