我知道,有一个数据库配置参数“数据库排序顺序”用于在 db2 中设置排序规则。但由于这会影响整个数据库并且只能在创建它时设置,我正在寻找为单个表或列设置它的可能性。或者,在 SQL 语句中设置排序规则,就像在 Microsoft SQL Server 上一样:
SELECT * FROM table ORDER BY col1 COLLATE Latin1_General_CI_AS
这在 DB2 中可能吗?如何?
其次,更改整个数据库、表或查询内的排序规则将如何影响性能?
我知道,有一个数据库配置参数“数据库排序顺序”用于在 db2 中设置排序规则。但由于这会影响整个数据库并且只能在创建它时设置,我正在寻找为单个表或列设置它的可能性。或者,在 SQL 语句中设置排序规则,就像在 Microsoft SQL Server 上一样:
SELECT * FROM table ORDER BY col1 COLLATE Latin1_General_CI_AS
这在 DB2 中可能吗?如何?
其次,更改整个数据库、表或查询内的排序规则将如何影响性能?
这是应该在手册中的信息。
我不了解 DB2,但对于其他人(MySql、PostgresSQL、SQL Server 或 Oracle),您可以使用 ALTER TABLE 来修改排序规则(或 ALTER DATABASE 来修改新表的默认排序规则)。
关于你的第二个问题:是的 - 它对速度有影响,最好不要在选择中设置排序规则。您可以使用应该可以进行最佳 Unicode 排序的 Unicode 排序算法:即使如此,您也会发现该算法并不适用于所有语言,但从统计的角度来看,您将获得最佳结果。
为每个用户实施不同的排序规则可能成本太高,即使这对用户体验来说并不是一件坏事。
有一个名为COLLATION_KEY_BIT的函数可以在这样的语句中使用: