暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

SUNDB数据库 order by 处理机制与oracle、mysql差异导致null值排序问题

原创 科蓝SUNDB编辑部 2022-12-21
355

1. 操作系统版本及内核发行版本:

CentOS 7.6–3.10.0-693.el7.x86_64

2. 数据库版本及架构:

数据库架构 单机, 数据库版本为 Release 5.0 22.1.0 revision(28cd72e)

3. 问题描述:

Hibernate 应用适配过程中SUNDB数据库 order by 处理机制与oracle、mysql差异导致null值排序问题

4. 问题原因:

SUNDB 数据库 order by 排序语句对于 null 值的处理默认是 nulls last(无论 asc 还是desc),可以通过 nulls first 或 nulls last 进行指定。
Oracle 数据库 order by 语句默认对于null 值的处理时认为 null 最大,所以 asc 时null在最后 desc 时null在最前。
Mysql 数据库 order by 默认处理方式与 Oracle 数据库相反。

5. 解决方案:

规范应用代码,order by 排序时明确指定 NULLS FIRST / NULLS LAST ,避免使用数据库默认方式。
不同数据库对于 order by 处理的差异参考:
order by ascending :
NULLS FIRST : MSSQL, MySQL, SQLite
NULLS LAST : PostgreSQL, ORACLE, DB2
order by descending :
NULLS FIRST : PostgreSQL, ORACLE, DB2
NULLS LAST : MSSQL, MySQL, SQLite
各供应商的操作都不一样的原因是标准中没有明确上述相关的内容。有人认为NULL在前是对的,有人认为在后是对的。
因为各供应商认为正确的部分都不一样,所以发生了这种现象。

最后修改时间:2023-07-17 14:55:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论