当字符串包含非 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/