![如何更改表/列的排序规则?](https://linux22.com/image/492322/%E5%A6%82%E4%BD%95%E6%9B%B4%E6%94%B9%E8%A1%A8%2F%E5%88%97%E7%9A%84%E6%8E%92%E5%BA%8F%E8%A7%84%E5%88%99%EF%BC%9F.png)
我知道,db2 中有一个用于设置排序规则的数据库配置参数“数据库排序顺序”。但由于这会影响整个数据库,并且只能在创建数据库时设置,因此我正在寻找为单个表或列设置此参数的可能性。或者,在 SQL 语句中设置排序规则,就像在 Microsoft SQL Server 上所做的那样:
SELECT * FROM table ORDER BY col1 COLLATE Latin1_General_CI_AS
在 DB2 中可以实现这一点吗?如何实现?
其次,改变整个数据库、表或查询内的排序规则将如何影响性能?
答案1
这类信息应该包含在手册中。
我不知道 DB2,但对于其他数据库(MySql、PostgresSQL、SQL Server 或 Oracle),您可以使用 ALTER TABLE 来修改排序规则(或使用 ALTER DATABASE 来修改新表的默认排序规则)。
关于您的第二个问题:是的 - 它对速度有影响,最好不要在选择中设置排序规则。您可以使用 Unicode 排序规则算法,该算法应该可以进行最佳的 Unicode 排序:即使如此,您也会发现该算法并不适用于所有语言,但从统计的角度来看,您将获得最佳结果。
即使这对于用户体验来说不是一件坏事,为每个用户实施不同的排序规则也可能成本太高。
答案2
有一个函数叫排序规则密钥位可以在语句中使用,如下所示:
SELECT FIRSTNME, LASTNAME
FROM EMPLOYEE
ORDER BY COLLATION_KEY_BIT(LASTNAME, 'UCA400R1_LDE')