程序员的知识教程库

网站首页 > 教程分享 正文

SQL的ORDER BY面对中文排序,一不小心就坑了

henian88 2025-04-27 13:47:19 教程分享 12 ℃ 0 评论

SQL的ORDER BY是我们最常用的了,但是对中文进行ORDER BY的时候总能带给我们意想不到的...“意外”。

比如我有部门名称分别为“业务一部、业务二部、业务三部、业务四部、业务五部”的这么5个部门,按照我们的期望,如果按部门名称ORDER BY的话,查询出来的顺序就应该是从一到五这样顺序显示的,可是MySQL中实际上确是如下图这样的结果:

关键是你还不知道他究竟是以什么样的方式进行排序的,以拼音?看起来在MySQL中压根和拼音也没有什么关系嘛!但是在SQLServer中确实是以拼音进行排序的。

SQLServer中确实看起来是以拼音进行排序的。业务二(E)部、业务三(SAN)部、业务四(SI)部、业务五(W)部、业务一(Y)部。

所以面对如此需求,怎么处理的?有些朋友引入了各种各样针对这种带“一,二,三,四,五”的排序方法(当然是以丢失了扩展性,灵活性为代价了),他们这种方法对应硬编码的系统是可以的,对于我们这种基于低代码开发的系统却无能为力了,因为我们面对的都是未知的需求。当然了,如果啥都要写SQL的话那确实、应该、也许、或者可以吧?

所以我们的建议是什么呢?如果面对这种需求,那就增加一个数字类型的“显示顺序”字段(基于低代码增加这样的字段就几秒钟的事情),比如我们增加了显示顺序后,就可以获得我们需要的结果了。

也许会有人觉得这种方法复杂,录入数据的时候还要填写“显示顺序”,我们的低代码支持整数控件自增的

但是如果遇到按多个中文字段排序,我们其实也只能是保证相对有序。

比多个排序的中文字段中都包含“一,二,三”这样的中文数值的时候,不可能每个字段都增加一个“显示顺序”,那就只能优先保证主顺序有序。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表