postgresql - 如何使用 PostgreSQL 和 Umlauts 的不区分大小写的模式匹配?

标签 postgresql design-patterns case-insensitive matching diacritics

当字符串包含非 ASCII 字符(如德语变音符号)时,我试图让 PostgreSQL 8.4.3 与其 ~* 运算符进行不区分大小写的模式匹配。数据库、终端和其他所有内容都配置为使用 UTF-8。

简而言之,这是问题:

SELECT 'Ö' ~* 'ö';      -- false

还有其他可行的变体:

SELECT 'Ö' ILIKE 'ö';     -- true
SELECT 'Ö' ~* '[Öö]';     -- true
SELECT LOWER('Ö') ~* 'ö'; -- true

这些选择都没有让我特别高兴。 ILIKE 不使用正则表达式。 [Öö] 涉及重写搜索词。 LOWER() 可能是最好的解决方法,但我真的很想让 ~* 运算符像预期的那样工作。

提前致谢。

最佳答案

这是 9.0 之前的 PostgreSQL 版本中的错误。
它位于 9.0 变更日志中:http://www.postgresql.org/docs/9.0/static/release-9-0.html#AEN99075

这是我使用 Ubuntu 在 9.0 beta2 中进行的测试:

SELECT 'Ö' ~* 'ö';
 ?column? 
----------
 t
(1 row)

关于postgresql - 如何使用 PostgreSQL 和 Umlauts 的不区分大小写的模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3104769/

相关文章:

sql - 查找所有超过 x 行的表的名称

c# - 我应该如何将行为注入(inject)实体

postgresql - PSQL 不区分大小写的 INDEX lower() 不起作用

android - BroadcastReceiver 应该在 Activity 中声明吗?

java - 结合继承和组合——设计模式

python - python中不区分大小写的字符串类

mysql - 如何创建带重音的 Mysql 唯一不区分大小写的索引 - (或使用 NO 排序规则)

postgresql - 从 PostgreSQL 中的另一个表中获取列值

SQL 查询显示多次而不是一次

postgresql - 如何创建一个表,插入两个具有相同主键且不重复的表,并且我需要所有数据