将max_length设置为非常大的值会占用额外的空间吗?

Mar*_*rty 4 python database django database-design django-models

我在模型中有一个领域,

name = models.CharField(max_length=2000)
Run Code Online (Sandbox Code Playgroud)

输入的数据是

name='abc'
Run Code Online (Sandbox Code Playgroud)

django模型的max_length设置为2000,而输入数据的长度仅为3,是否max_length为每个对象在数据库表中保留2000个字符的空间?保存模型对象后,是否释放了空间?

max_length如果数据库上的对象数为数千或数百万,则设置更高的值会增加数据库的大小吗?

数据库是postgres

Adr*_*uta 5

CharField将由表示character varying(max_length)PostgreSQL中。

文档

短字符串(最多126个字节)的存储要求是1个字节加上实际的字符串,其中包括在字符情况下的空格填充。较长的字符串的开销为4个字节,而不是1个字节。

因此,字符串将占用的磁盘空间取决于它的长度+一小笔开销,而不取决于字段的最大长度。

使用更高max_length的磁盘不会增加数据库使用的磁盘空间。

  • 请注意,此答案适用于 PostgreSQL、MySQL、Oracle 和 SQL Server。如果您选择使用非关系型或其他数据库,则情况可能并非如此。 (2认同)