postgresql 9.2 中 varchar(n) 的最大长度是多少,哪个最好使用 varchar(n) 或 text?

Posted

技术标签:

【中文标题】postgresql 9.2 中 varchar(n) 的最大长度是多少,哪个最好使用 varchar(n) 或 text?【英文标题】:what is the maximum length of varchar(n) in postgresql 9.2 and which is best to use varchar(n) or text? 【发布时间】:2014-04-10 06:20:41 【问题描述】:

您好,我正在使用 postgresql 9.2,我想使用 varchar(n) 来存储一些长字符串,但我不知道 varchar(n) 支持的最大字符长度。哪一个更好用,你能建议我吗?谢谢

【问题讨论】:

【参考方案1】:

tl;dr:1 GB(每个字符(实际上:代码点)可能由 1 个或多个字节表示,具体取决于它们在 unicode 平面上的位置 - 假设是 UTF-8 编码的数据库)。在 Postgresql 中,您应该始终使用 text 数据类型来处理任意长度的字符数据。

说明: varchar(n)text 使用相同的后端存储类型 (varlena):具有 32 位长度计数器的可变长度字节数组。对于索引行为text 甚至可能有一些性能优势。在 Postgres 中使用text 类型进行新开发被认为是最佳实践;由于 SQL 标准支持原因,varchar(n) 仍然存在。注意:varchar()(带空括号)是 text 的 Postgres 特定别名。

另请参阅: http://www.postgresql.org/about/

【讨论】:

【参考方案2】:

根据官方文档(http://www.postgresql.org/docs/9.2/static/datatype-character.html):

在任何情况下,可以存储的最长可能字符串大约为 1 GB。 (数据类型声明中允许的最大值 n 小于该值。更改此值没有用处,因为使用多字节字符编码,字符数和字节数可能完全不同。如果您希望存储没有特定上限的长字符串,使用没有长度说明符的文本或字符变化,而不是构成任意长度限制。)

在线搜索显示允许的最大值因安装和编译选项而异,一些用户报告最多 10485760 个字符(10MiB,假设每个字符固定编码 1 个字节)。

“安装和编译选项”是指您始终可以自己从源代码构建 PostgreSQL,在您编译 PostgreSQL 以创建自己的数据库服务器之前,您可以配置它如何存储文本以更改您可以存储的最大数量 - 但是如果您这样做,则意味着如果您尝试将数据库文件与 PostgreSQL 的“正常”、非自定义构建一起使用,您可能会遇到麻烦。

【讨论】:

感谢您这么快的回复。但是你能解释一下,“取决于安装和编译选项”是什么意思

以上是关于postgresql 9.2 中 varchar(n) 的最大长度是多少,哪个最好使用 varchar(n) 或 text?的主要内容,如果未能解决你的问题,请参考以下文章

播放框架中未解决的 postgresql 9.2 jar 依赖关系

如何在 PostgreSQL 9.2 中分析 plpgsql 函数

如何在 Django 中使用 PostgreSQL 9.2 JSON 数据类型?

Postgresql 9.2 中在查询中调用函数的正确方法

PostgreSQL 9.2 设置 enable_nestloop 没有效果

在 postgreSQL 9.2 上编辑 postgresql.conf 文件?