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码!!!只有字符才有,字符串的比较就是分成一个一个字符比较,第一个和第一个比,如果二个相等,就第二个和第二个比。一直比出一个大小为止。

  • 相关阅读:
    BZOJ1054|HAOI2008移动玩具|广搜
    tarjan算法
    BJOJ2190|SDOI仪仗队|数论
    POJ2975|Nim|博弈论
    POJ1740|A NEW STONE GAME|博弈论
    python 单例模式
    linux 根据服务名称批量杀死进程
    python 任务计划
    python偏函数
    安装scrapy框架
  • 原文地址:https://www.cnblogs.com/lyh233/p/14710254.html
Copyright © 2011-2022 走看看