zoukankan      html  css  js  c++  java
  • mysql 使用order by String 的巨坑 注意事项

    背景:
    原本目的在于根据一个整形字段进行降序排列,排序结果应该是要达到10>9>8>1 因表结构定义字段为string 时,order by String 导致排序与目标不一致,导致排序结果成为8>9>10>1,导致排序错误,进一步引发其他问题。

    原因
    String 是比较字符的ascii 码,会导致10 比2小。
    ‘a~z’=97~122
    ‘A~Z’=65 ~ 90
    ‘0~ 9’=48 ~ 57
    小写字母ASCII = 大写子ASCII + 32

    大于9的数字都是将每一位字符转换成ASCII值,ASCII比较大小的时候是比较两个数中的第一个字符
    比如10是两个字符,1和0,aicII码分别是十进制49和48
    字符2的ASCII码是50,所以字符10与字符2比较得到10比2的结果。
    解决办法:

    select * from table order by card + 0 desc

    或者
    select * from table order by (card AS SINED INTEGER)desc

    思考:
    Java string 类型的字符串比较会不会有此类问题, 可以直接用字符串进行比较
    因为字符串没有ASCII码!!!只有字符才有,字符串的比较就是分成一个一个字符比较,第一个和第一个比,如果二个相等,就第二个和第二个比。一直比出一个大小为止。

  • 相关阅读:
    gulp基础
    字符串及字符串的方法
    ES5
    JS的设计模式
    VSN与GitHub
    JS闭包函数的概念及函数的继承
    Promise的工作原理
    JS原生的Ajax
    MySQL数据库的基本操作
    & 异步使用场景
  • 原文地址:https://www.cnblogs.com/lyh233/p/14710254.html
Copyright © 2011-2022 走看看