【发布时间】:2010-06-23 19:17:38
【问题描述】:
当字符串包含非 ASCII 字符(如德语变音符号)时,我试图让 PostgreSQL 8.4.3 使用其 ~* 运算符进行不区分大小写的模式匹配。数据库、终端和其他一切都配置为使用 UTF-8。
简而言之就是问题所在:
SELECT 'Ö' ~* 'ö'; -- false
还有其他变体可以工作:
SELECT 'Ö' ILIKE 'ö'; -- true
SELECT 'Ö' ~* '[Öö]'; -- true
SELECT LOWER('Ö') ~* 'ö'; -- true
这些选择都没有让我特别高兴。 ILIKE 不使用正则表达式。 [Öö] 涉及重写搜索词。 LOWER() 可能是最好的解决方法,但我真的很想让~* 运算符按预期工作。
提前致谢。
【问题讨论】:
-
变音符号和单词边界存在相关问题。例如,模式 '\möl' 将不匹配字符串 'öl'。
标签: postgresql design-patterns case-insensitive matching diacritics