【问题标题】:Firebird order by collationFirebird 按排序规则排序
【发布时间】:2016-10-03 03:58:45
【问题描述】:

我对 Firebird 2.5 有奇怪的问题。

我的数据库有默认字符集 = utf8。

我在 patienten 表中有一个列 p_nname

CREATE TABLE PATIENTEN (
   P_NNAME       VARCHAR(25) DEFAULT '' NOT NULL COLLATE UNICODE_CI,

我希望排序规则在任何地方都可以使用。我的意思是在 WHERE 和 ORDER BY 子句中。

我所拥有的是在 WHERE 中工作的排序规则。下面的两个查询给了我类似的结果,这很好。

select * from patienten where p_nname='adler'
select * from patienten where p_nname='ADler'

问题是 ORDER BY 子句没有按我的预期工作。

此 SQL 的工作方式与该列没有 UNICODE_CI 排序规则一样。

select * from patienten order by p_nname

为了获得所需的良好排序结果,我必须这样写:

select * from patienten order by p_nname collate unicode_ci

有没有办法在 ORDER BY 子句中省略 COLLATE 标志?

【问题讨论】:

  • 似乎是一个错误。当然 ORDER BY 应该根据列的排序规则进行排序。
  • @jarlh 我的意思是一样的,但我不是 Firebird 的专家。
  • 我也没有,没用过。但在这种情况下,我非常了解 ANSI/ISO SQL 标准规范。
  • 您使用的确切 Firebird 版本是什么?我刚刚尝试重现该问题,但对我而言,它在 Firebird 2.5.5 上按预期工作。
  • 另外,您可能希望展示订单样本以及您认为应该是什么。

标签: sql utf-8 firebird firebird2.5


【解决方案1】:

看起来确实是一个错误,documentation 声明:

关键字 COLLATE 指定字符串列的排序顺序 如果您需要一个不同于正常的排序规则 柱子。正常排序顺序将是默认排序顺序 数据库字符集或已在 列的定义。

所以它应该可以在 ORDER BY 中不指定 collat​​e 子句的情况下工作。我建议你提交错误报告。

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2012-12-13
    • 2012-01-12
    • 2018-12-19
    • 2023-04-11
    相关资源
    最近更新 更多