2011-08-29 30 views
7

为什么使用CharField的max_length等于2^n而其他人使用2^n-1?CharField max_length 2^n vs 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) 
    

ALTH尽管这不是科学措施,但是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而不是od 2^n?

回答

6

你大都知道了。它不仅仅是255的唯一= True参数,而且长度为255的字符串也可以是sometimes be stored more efficiently

所以答案是有或许指向255和256,但对于其他长度,它很可能是毫无意义的。由于科学原因,通常不会采用两种长度的开头功能(我们大多数人并没有真正基准测试过,我们的512长场使我们的应用程序运行速度明显快于513长场)。

也就是说,可能存在特定于应用程序的情况,其中Django应用程序是C应用程序的前端,其中具有N^2-1个字符串可用于进一步有效存储额外终止的\0字节。