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'
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
您的建议使用。
那不应该重写您的数据,也不会更改任何索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句