2011-08-29 64 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字節。