【问题标题】:PostgreSQL character varying length limitPostgreSQL 字符变长限制
【发布时间】:2011-02-23 16:51:02
【问题描述】:

我在 PostgreSQL 中使用字符变化数据类型。 我无法在 PostgreSQL 手册中找到此信息。 字符变化数据类型中字符的最大限制是多少?

【问题讨论】:

    标签: database postgresql


    【解决方案1】:

    参考documentationvarchar(n) 类型定义没有明确的限制。但是:

    ...
    无论如何,最长的可能 可以存储的字符串是 大约 1 GB。 (最大值 数据类型中将允许 n 声明少于此。它 改变这个不会很有用 因为多字节字符 编码字符数和 无论如何,字节可能完全不同。 如果您想存储长字符串 没有具体上限,使用文字 或无长度变化的字符 说明符,而不是组成一个 任意长度限制。)

    还要注意这一点:

    提示:没有表现 这三种类型的区别, 除了增加存储空间 使用空白填充类型时,以及 几个额外的 CPU 周期来检查 存储时的长度 长度受限的列。尽管 字符(n)有表现 在其他一些数据库中的优势 系统,没有这样的优势 PostgreSQL;实际上字符(n)是 通常是三个中最慢的 因为它有额外的存储空间 费用。在大多数情况下,文本或 应使用字符变化 而是。

    【讨论】:

      【解决方案2】:

      来自documentation

      无论如何,可以存储的最长的字符串大约是 1 GB。

      【讨论】:

        【解决方案3】:

        postgresql 中的字符类型

        • 字符可变(n),varchar(n) = 可变长度,有限制
        • character(n), char(n) = 固定长度,空白填充
        • 文本 = 可变长度不限

        根据您的问题,我建议您使用 text 类型。该类型不需要字符长度。

        另外,PostgreSQL 提供了 text 类型,可以存储任意长度的字符串。虽然类型文本不在 SQL 标准中,但其他几个 SQL 数据库管理系统也有。

        来源:https://www.postgresql.org/docs/9.6/static/datatype-character.html

        【讨论】:

          【解决方案4】:

          最大字符串大小约为 1 GB。根据 postgres docs:

          非常长的值也存储在后台表中,这样它们就不会干扰对较短列值的快速访问。无论如何,可以存储的最长的字符串大约是 1 GB。 (数据类型声明中允许的 n 的最大值小于该最大值。)

          请注意,您可以为 varchar 指定的最大 n 小于最大存储大小。虽然这个限制可能会有所不同,但快速检查会发现 postgres 11.2 的限制是 10 MB

          psql (11.2)
          
          => create table varchar_test (name varchar(1073741824));
          ERROR:  length for type varchar cannot exceed 10485760
          

          实际上,当您没有合理化的长度限制时,suggested 您只需使用varchar 而不指定一个。根据官方文档,

          如果您希望存储没有特定上限的长字符串,请使用不带长度说明符的文本或字符变化,而不是构成任意长度限制。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-22
            • 2011-04-19
            • 1970-01-01
            • 1970-01-01
            • 2016-09-18
            • 2016-09-04
            相关资源
            最近更新 更多