您好我正在使用postgresql 9.2并且我想使用varchar(n)来存储一些长字符串,但我不知道varchar(n)支持的字符的最大长度。哪一个更好用,你能建议我吗?感谢
答案 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特定别名。
答案 1 :(得分:17)
根据官方文件(http://www.postgresql.org/docs/9.2/static/datatype-character.html):
在任何情况下,可存储的最长字符串大约为1 GB。 (数据类型声明中n允许的最大值小于此值。更改此值不会有用,因为使用多字节字符编码时,字符数和字节数可能会大不相同。如果您需要存储没有特定上限的长字符串,使用不带长度说明符的文本或字符变化,而不是构成任意长度限制。)
在线搜索显示允许的最大值因安装和编译选项而异,有些用户报告最多10485760
个字符(完全为10MiB,假设每字符固定编码为1个字节)。
通过"安装和编译选项"我的意思是你总是可以自己从源代码构建PostgreSQL,然后在编译PostgreSQL以创建自己的数据库服务器之前,你可以配置它如何存储文本来改变你可以存储的最大数量 - 但是如果这样做则意味着你可能遇到如果您尝试将数据库文件与#34;普通"非定制的PostgreSQL版本一起使用,则会出现问题。