【发布时间】: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