mysql 中对于中文+数字的排序

最近遇到了一个问题需要用sql对数据进行排序但是排序的字段是中文+数字的形式存储的

示例: 班级名称+班级序列号

 自动化 202    

最初的想法是将数字切割出来进行排序,但是发现在sql中很难切割(主要是数字出现的位置问题),后来我在想是不是需要单独添加一个能够直接排序的字段,询问我的老师后发现,他的想法居然是直接使用 中文+数字的形式排序,这种想法让我很吃惊,后来尝试发现这样居然能够排序出来,

我想问一下在mysql 中 中文+数字为啥能够排序成功,mysql是按照什么样的排序规则去处理(中文+数字),这种是特例还是普遍适用的呢?请帮我解答一下

阅读 3.7k
1 个回答

本身就是根据字符来排序,但是这样有一些问题。

比如 select '自动化 202' < '自动化 23' 这条语句将会返回 1 即表示成立。

直觉是 202 怎么可能小于 23 ?实际上,他是按照字符来比较的,也就是比较到 自动化 20自动化 23 时,这时候就已经有结果了(3 > 0)。

还有比如 select '自动化202' > '自动化 202'; 这条语句会返回 1 也就是成立,因为 2 和空格相比,2 更大。

如果你的数据是完全规范的,可以使用这个方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题