![PostgreSQL 中“varchar”和“text”类型有什么区别?](https://linux22.com/image/540807/PostgreSQL%20%E4%B8%AD%E2%80%9Cvarchar%E2%80%9D%E5%92%8C%E2%80%9Ctext%E2%80%9D%E7%B1%BB%E5%9E%8B%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我所知道的关于它们的区别只是varchar
有限度,而text
不是无限度。文档没有提及此事。
这真的是唯一的区别吗?没有考虑性能等吗?
答案1
这件事的背景是:旧的 Postgres 系统使用 PostQUEL 语言,并使用名为 的数据类型text
(因为有人认为这是存储文本类型的好名字)。然后,Postgres 被转换为使用 SQL 作为其语言。为了实现 SQL 兼容性,没有重命名该text
类型,而是添加了一个新类型varchar
。但这两种类型在内部都使用相同的 C 例程。
现在,在某种程度上和某些地方,text
被硬编码为默认类型,以防无法派生其他类型。此外,大多数函数只能作为参数text
或返回 来使用text
。这两种类型是二进制兼容的,因此转换是一个简单的解析时操作。但使用text
总体上对系统来说仍然更自然。
但除了这些细节之外,没有明显的区别。使用你觉得更漂亮的那个。;-)
答案2
看这个类似的问题。要点是没有区别,但指定最大长度,例如varchar(n)
通常不是对您有利,因为它使用了更多空间但并没有提高性能。
答案3
http://www.postgresql.org/docs/8.4/interactive/datatype-character.html
character varying(n), varchar(n) variable-length with limit
text variable unlimited length
未声明长度的文本。这两种类型之间没有性能差异。