mysql表中字符串类型的数值按数值进行排序

  • 今天在写一个很简单的添加之后自动排序的小功能遇到了一个小问题,写下记录顺便提供给大家参考。
  • 由于数据库不是本人设计的,也没太仔细了解字段类型,写出sql查询如下图

 很明显,我写的sql是希望按照这三个字段进行升序排列,查看之后发现scene_no是varchar类型,第一次遇到这个问题我很不解,就算是字符串类型为什么要分开排序呢?这样不就等于把“10”分成“1”、“0”进行排序的吗,wtk!?这么神奇吗?百度了一下字符串类型是如何进行排序的,看了一些答案自己尝试了一下果然OK!

因为mysql进行的排序规则是按照ASCII码进行排序的,并不会自动的识别出这些数据是数值,sql改为

order by 字段名称+0 desc/asc的形式进行排序 即可。这样mysql会将数值字符串类型的数据当作数值进行处理,但是存在效率问题,不推荐使用varchar/char类型来存储数值,这样会带来不不必要的问题,仅供大家参考!下图是修改过的排序