2011-08-29 21 views
7

Perché si usa max_length di CharField uguale a 2^n mentre altri utilizzano 2^n-1?CharField max_length 2^n vs 2^n-1

Ad esempio:

  • in django.contrib.gis.db.backends.postgis.models (Django 1.3):

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

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

Alth non è una misura scientifica, 2048 seems to be more popular than 2047, ma 255 is more popular than 256. La documentazione di Django dice che in MySQL max_length is restricted to 255 characters if you are using unique=True. Ma perché dovrei usare 2^n-1 invece di 2^n negli altri casi?

risposta

6

L'hai quasi capito. Non è solo l'univoco = argomento True per 255, è anche che le stringhe fino a 255 lunghe possono sometimes be stored more efficiently.

Quindi la risposta è che c'è forse un punto per farlo per 255 contro 256, ma per altre lunghezze è molto probabile che sia inutile. La scelta tra due lunghezze per iniziare non viene spesso eseguita per ragioni scientifiche (la maggior parte di noi non ha effettivamente stabilito un benchmark sul fatto che il nostro campo lungo 512 ha reso la nostra applicazione più veloce di un campo lungo 513).

Detto questo, ci possono essere casi specifici dell'applicazione in cui l'applicazione Django è un frontend di un'applicazione C, dove avere le stringhe N^2-1 è utile più avanti sulla linea per archiviare in modo efficiente il byte terminante aggiuntivo \0.

Problemi correlati