如何解决索引列上的 VARCHAR 比较
Postgres 的行为与“常识”预期行为不同:
给定一个表“my_table”和一个名为“MyVarcharColumn”的 VARCHAR(250) 列,其中基于“MyVarcharColumn”创建索引 IDX_MyvarcharColumn。
Collation: Default
Postgres version: 11.12
LC_COLLATE: en_US.utf8
Enconding: UTF8
CTYPE: en_US.utf8
问题如下:
SELECT * FROM my_table t
WHERE 'mystring' = t.MyVarcharColumn
运行上述查询时,即使“my_table”中存在值“mystring”,也不会返回任何记录。
解决方法:
SELECT * FROM my_table t
WHERE 'mystring' = t.MyVarcharColumn collate "C"
通过添加 'collate "C"' 查询工作正常,显然没有人希望在每个查询的末尾添加 "collate" 语句。
第二个“解决方法”:
通过重新创建数据库索引“REINDEX database myDB”,查询也开始按预期工作,无需添加语句“collate”。
问题是:有没有办法避免使用 collate 语句和/或 REINDEX 在没有解决方法的情况下完成这项工作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。