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

时间:2014-04-10 06:20:41

标签: sql postgresql-9.2

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

2 个答案:

答案 0 :(得分:39)

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

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

另见: http://www.postgresql.org/about/

答案 1 :(得分:17)

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

  

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

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

通过"安装和编译选项"我的意思是你总是可以自己从源代码构建PostgreSQL,然后在编译PostgreSQL以创建自己的数据库服务器之前,你可以配置它如何存储文本来改变你可以存储的最大数量 - 但是如果这样做则意味着你可能遇到如果您尝试将数据库文件与#34;普通"非定制的PostgreSQL版本一起使用,则会出现问题。