2

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

简而言之,这是问题:

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

还有其他变体可以工作:

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

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

提前致谢。

4

2 回答 2

4

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

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

SELECT 'Ö' ~* 'ö';
 ?column? 
----------
 t
(1 row)
于 2010-06-23T20:49:57.947 回答
1

我对这个查询是真的:

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

但我确实在 OS X 10.5.8 上使用了 9.0beta2 版本,并具有以下设置:

CREATE DATABASE test
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'nl_NL.UTF-8'
       LC_CTYPE = 'nl_NL.UTF-8'
       CONNECTION LIMIT = -1;

编辑:版本 8.3.7 上的结果相同。看起来你的编码有问题。

于 2010-06-23T19:29:14.827 回答