【问题标题】:Comparing Text on PostgreSQL 8.4 and 9.1比较 PostgreSQL 8.4 和 9.1 上的文本
【发布时间】:2013-06-05 14:19:38
【问题描述】:

我有两个数据库,一个在 postgresql 8.4 上运行,另一个在 postgresql 9.1 上运行。 两者都在具有相同语言环境 (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

【问题讨论】:

    标签: postgresql locale


    【解决方案1】:

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

    9.0 release notes看到这个sn-p:

    E.14.3.6。功能
    [...]
    使用 UTF-8 支持特定于语言环境的正则表达式处理 服务器编码(Tom Lane)

    特定于语言环境的正则表达式功能包括 不区分大小写的匹配和特定于语言环境的字符类。 以前,这些功能对非 ASCII 字符正常工作 仅当数据库使用单字节服务器编码时(例如 拉丁语1)。它们仍然会在多字节编码中表现不佳,而不是 UTF-8。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2012-06-17
      • 2015-01-08
      • 1970-01-01
      • 2016-01-10
      • 2013-03-27
      • 2012-06-20
      相关资源
      最近更新 更多