简体   繁体   中英

CharField max_length 2^n vs 2^n-1

Why does one use max_length of CharField equal to 2^n whilst others use 2^n-1?

For example:

  • 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) 

Although it is not scientific measure, 2048 seems to be more popular than 2047 , but 255 is more popular than 256 . Django documentation says, that in MySQL max_length is restricted to 255 characters if you are using unique=True . But why would I use 2^n-1 instead od 2^n in other cases?

You've mostly got it. It's not just the unique=True argument for 255, it's also that strings up to 255 long can sometimes be stored more efficiently .

So the answer is that there is maybe a point to doing it for 255 vs. 256, but for other lengths it's very likely to be pointless. Picking power-of-two lengths to begin with is often not done for a scientific reason (most of us haven't actually benchmarked that our 512-long field made our application run measurably faster than a 513-long field).

That said, there may be application-specific cases where the Django application is a frontend to a C application, where having N^2-1 strings is useful further down the line to efficiently store the additional terminating \\0 byte.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM