为什么使用max_length的CharField等于2 ^ n而其他人使用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)
虽然这不是科学衡量标准,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而不是2 ^ n?
答案 0 :(得分:6)
你大多都得到了它。它不仅仅是255的unique = True参数,而且长达255的字符串也可以sometimes be stored more efficiently。
所以答案是可能要为255和256做点,但对于其他长度,它很可能毫无意义。由于科学原因,我们大多数人都没有真正开始测试我们的512长场使我们的应用程序的运行速度明显快于513长的场地。
也就是说,可能存在特定于应用程序的情况,其中Django应用程序是C应用程序的前端,其中具有N ^ 2-1字符串对于有效存储附加终止\0
而言更有用。字节。