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
。
那不应该重写你的数据,它不会改变任何索引。
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
。
那不应该重写你的数据,它不会改变任何索引。