问题描述
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 (将#修改为@)