2011-08-29 25 views
7

¿Por qué uno usa max_length de CharField igual a 2^n mientras que otros usan 2^n-1?CharField max_length 2^n vs 2^n-1

Por ejemplo:

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

    class SpatialRefSys(models.Model, SpatialRefSysMixin): 
        srtext = models.CharField(max_length=2048) 
    
  • en django_openid_auth.models (DJANO-openid- auth 0,3):

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

Alth Aunque no es una medida científica, 2048 seems to be more popular than 2047, pero 255 is more popular than 256. La documentación de Django dice que en MySQL max_length is restricted to 255 characters if you are using unique=True. ¿Pero por qué usaría 2^n-1 en lugar de od 2^n en otros casos?

Respuesta

6

Lo has conseguido en su mayoría. No es solo el único argumento = True para 255, también es que las cadenas de hasta 255 pueden sometimes be stored more efficiently.

Así que la respuesta es que hay tal vez un punto para hacerlo para 255 contra 256, pero para otras longitudes es muy probable que no tenga sentido. Por lo general, la elección de las longitudes de potencia de dos no se realiza por una razón científica (la mayoría de nosotros no ha evaluado realmente que nuestro campo de 512-long hizo que nuestra aplicación se ejecutara mensurablemente más rápido que un campo de 513-long).

Dicho esto, puede haber casos específicos de aplicaciones donde la aplicación Django es una interfaz para una aplicación C, donde tener cadenas N^2-1 es útil más adelante en la línea para almacenar eficientemente el octeto \0 de terminación adicional.

Cuestiones relacionadas