在变音符号上的PostgreSQL模式匹配

时间:2017-10-24 14:06:19

标签: postgresql collation

AFAIK以下所有三项测试都应返回true(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'返回t?或者我应该只将COLLATE附加到我的所有查询调用中吗?或者我应该只运行以下内容,这实际上是不会触及数据,只查找行为和索引?

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

1 个答案:

答案 0 :(得分:1)

如果未指定归类,则使用的默认归类是数据库归类,您可以使用SQL语句找到该归类

SHOW lc_collate;

SELECT current_setting('lc_collate');

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

这不应该重写您的数据,也不会改变任何索引。