0

我有两个数据库,一个在 postgresql 8.4 上运行,另一个在 postgresql 9.1 上运行。两者都在具有相同语言环境的 CentOS 机器上(en_US ) 的 CentOS 机器上。

假设我有一个包含这些数据的表:

id | description
1    Morango
2    CAFÉ
3    pera
4    Uva

奇怪的是,当我运行这样的查询时:

SELECT * FROM products WHERE description ~* 'café'

在 8.4 机器上我没有得到任何结果,但在 9.1 机器上我得到了行(CAFÉ )。显然,它们在如何比较大写 unicode 字符方面有所不同。

  1. 有人能给我一些关于这个问题的见解吗?
  2. 是不是 postgresql 的不同版本会导致这个问题?
  3. 我可以进行任何其他配置来平衡两台机器的行为吗?

更新:两个数据库都是 UTF-8

4

1 回答 1

2

在 9.0 之前,基本上不支持非美国 Unicode 字符的不区分大小写的正则表达式匹配。

请参阅9.0 发行说明中的​​此代码段:

E.14.3.6。函数
[...]
使用 UTF-8 服务器编码支持特定于区域设置的正则表达式处理 (Tom Lane)

特定于区域设置的正则表达式功能包括不区分大小写的匹配和特定于区域设置的字符类。以前,只有当数据库使用单字节服务器编码(例如 LATIN1)时,这些功能才能正确处理非 ASCII 字符。它们仍然会在 UTF-8 以外的多字节编码中表现异常。

于 2013-06-05T21:02:23.633 回答