【问题标题】:do setting the max_length to a very large value consume extra space?将 max_length 设置为一个非常大的值会消耗额外的空间吗?
【发布时间】:2015-06-05 10:04:22
【问题描述】:

我在模型中有一个字段,

name = models.CharField(max_length=2000)

输入的数据是,

name='abc'

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

如果数据库中的对象数量为数千或数百万,是否设置更高的max_length会增加数据库的大小?

数据库是postgres

【问题讨论】:

标签: python django database database-design django-models


【解决方案1】:

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

来自docs

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

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

使用更高的max_length 不会增加 db 使用的磁盘空间。

【讨论】:

  • 请注意,此答案适用于 PostgreSQL、MySQL、Oracle 和 SQL Server。如果您选择使用非关系型或其他数据库,则可能并非如此。
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多