PostgreSQL中与SQL Server NVARCHAR(MAX)相当的类型是什么?

6

我知道在PostgreSQL中,VARCHAR(n)等同于SQL Server的NVARCHAR(n),但是我该如何在PostgreSQL中使用像VARCHAR(MAX)这样的内容,类似于SQL Server中的NVARCHAR(MAX)


1
文本:https://www.postgresql.org/docs/current/datatype-character.html - Abelisto
@Abelisto 请回答问题,以便我可以接受。 - Pratik
1
答案太简短了。只需仔细阅读PostgreSQL文档 - 在我看来,这确实是一篇很好的阅读材料 :) - Abelisto
@Abelisto 是的,但我希望您在回答中提供此信息,以便将来其他人可以受益。 - Pratik
在SQL Server中,它是**NVARCHAR而不是NVCHAR** - 已更正。 - marc_s
3个回答

4

在PostgreSQL中,对于char(n)varchar(n)类型,只受到n参数的限制(不确定这种限制的性质,似乎是20MB或10M的2字节字符或其他什么)。

postgres=# select 'a'::varchar(999999999);
ERROR:  length for type varchar cannot exceed 10485760

如果你真的需要类似于MS SQL Server的nvarchar(max),那么可以使用varchar(10485760)

但是,为了使用真正无限长度的字符值,有两种方法:varchar或不带参数的character varying,或者只使用text类型。在文档中阅读更多内容,并注意其中提供的提示:

这三种类型之间没有性能差异,除了使用空格填充类型时增加的存储空间以及在存储到长度受限列时检查长度时增加的一些额外CPU周期。虽然在其他一些数据库系统中,character(n)具有性能优势,但在PostgreSQL中没有这样的优势;事实上,由于其额外的存储成本,character(n)通常是最慢的。在大多数情况下,应改为使用text或character varying。


4
如果您想创建一个“无限制”的varchar列,只需使用没有长度限制的varchar即可。 从手册中可以看到:

如果使用字符变量而没有指定长度,该类型将接受任何大小的字符串

因此,您可以使用:
create table foo
( 
  unlimited  varchar
);

另一种选择是使用text

create table foo
( 
  unlimited text
);

关于字符数据类型的更多细节请参阅手册:
http://www.postgresql.org/docs/current/static/datatype-character.html


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接