PostgreSQL中text与无长度限制varchar数据类型的差异
PostgreSQL text 与无长度限制 varchar 的疑问
PostgreSQL建议:若要存储无特定上限的长字符串,请使用text或不带长度说明符的character varying,而非随意设定长度限制。
请问这两种数据类型在PostgreSQL中是否完全相同?从文档来看它们的表现似乎完全一致,若果真如此,为何要设置两种功能相同的数据类型?
功能表现:完全一致
在PostgreSQL里,text 和不带长度限制的 varchar(也就是 character varying)没有任何功能差异:
- 存储机制完全相同,都能容纳任意长度的字符串(仅受数据库全局的最大字段尺寸限制)
- 查询、索引、排序等操作的性能完全对等
- 所有字符串相关的函数、运算符对两者都适用,没有专属的限制或优化
存在两种类型的原因
核心是为了兼容SQL标准和不同用户的使用习惯:
character varying是SQL标准定义的类型,不带长度限制的写法属于标准的扩展形式,符合SQL规范要求text是PostgreSQL很早就支持的非标准类型,是PostgreSQL社区的传统常用类型,很多老用户和原生PostgreSQL项目更习惯用它- 方便从其他数据库迁移的用户,不少数据库默认用
varchar存储长文本,保留这个类型可以减少迁移时的代码修改成本
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

