我知道在PostgreSQL中,VARCHAR(n)
等同于SQL Server的NVARCHAR(n)
,但是我该如何在PostgreSQL中使用像VARCHAR(MAX)
这样的内容,类似于SQL Server中的NVARCHAR(MAX)
?
我知道在PostgreSQL中,VARCHAR(n)
等同于SQL Server的NVARCHAR(n)
,但是我该如何在PostgreSQL中使用像VARCHAR(MAX)
这样的内容,类似于SQL Server中的NVARCHAR(MAX)
?
在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。
varchar
列,只需使用没有长度限制的varchar
即可。
从手册中可以看到:
因此,您可以使用:如果使用字符变量而没有指定长度,该类型将接受任何大小的字符串
create table foo
(
unlimited varchar
);
另一种选择是使用text
:
create table foo
(
unlimited text
);
关于字符数据类型的更多细节请参阅手册:
http://www.postgresql.org/docs/current/static/datatype-character.html
text, varchar 可以用于此需求。我使用了 varchar
字符类型 描述
character varying(n), varchar(n) --- 可变长度,有限制
character(n), char(n) -- 固定长度,填充空格
text, varchar -- 可变长度,无限制
更多细节: https://www.postgresqltutorial.com/postgresql-char-varchar-text/
NVARCHAR
而不是NVCHAR
** - 已更正。 - marc_s