PostgreSQL 模式匹配变音符号

PostgreSQL pattern match on Umlauts

AFAIK 以下所有三个测试都应该 return 为真 (t)。当我附加 COLLATE "de_DE".

时,它们实际上起作用了

我运行正在交互式数据库终端上执行此操作,所以不确定排序规则是否生效?我能以某种方式检查哪种排序规则有效吗?如果是这样,可以在不修改(UTF-8 编码的)数据的情况下更改它吗?

                                            version                                             
------------------------------------------------------------------------------------------------
 PostgreSQL 9.4.13 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit

=> SELECT 'Ü' ~* 'Ü';
 ?column? 
----------
 t

=> SELECT 'Ü' ~* 'ü';
 ?column? 
----------
 f

=> SELECT 'Ü' ~* '\mÜ';
 ?column? 
----------
 f

或者,有没有办法使模式匹配变音不敏感,即 'Ü' ~*SOMETHINGHERE '\mU' return t?或者我应该将 COLLATE 附加到我所有的查询调用中吗?或者我应该 运行 以下内容,这实际上不会触及数据,只触及查找行为和索引吗?

ALTER TABLE articles ALTER COLUMN title SET DATA TYPE VARCHAR(255) COLLATE "de_DE";

如果未指定排序规则,则使用的默认排序规则是数据库排序规则,您可以在 SQL 语句中找到它

SHOW lc_collate;

SELECT current_setting('lc_collate');

要使用不同于默认排序规则的排序规则,您必须在查询中明确使用 COLLATE 来指定要使用的排序规则,或者您可以按照建议使用 ALTER TABLE

那不应该重写你的数据,它不会改变任何索引。