我将为PostgreSQL中的列创建索引。
我想知道 char 和 varchar 数据类型之间是否存在搜索速度差异?
答案 0 :(得分:0)
将字符串存储为char(n)
时,会添加额外的空格以将其填充到长度n
。
在char
上执行操作时,需要额外的逻辑来忽略任何尾随空格。
除此之外,char
与Postgres中的varchar
相同。
因此,如果要处理长度可变的字符串,请使用varchar
。如果您的值是固定长度的,则没有太大区别,尽管char
列可能会使您的数据库架构更容易理解。
请注意,char
不能区分文字空间和填充字符之间的差异,这会导致某些奇怪的行为(按照SQL标准的要求)。例如,值''::char(1)
和' '::char(1)
被认为是相等的,这可能不是您所期望的。因此,如有疑问,请使用varchar
。
如果您使用可变长度值并且不知道最大大小,则可能需要text
。 text
的存储和性能与varchar(n)
完全相同(所有字符串值均由TOAST处理),但是text
没有最大长度(除了1GB的限制)适用于所有类型)。