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

  • 相关阅读:
    AngularJS学习之旅—AngularJS 服务(八)
    Svchost进程和共享服务病毒原理
    服务劫持
    利用BHO实现浏览器劫持
    动态反调试
    常用的静态反调试技术及其规避方法
    teb, peb,seh 结构
    线程本地存储tls
    注入技术总结
    注入技术--远程线程注入
  • 原文地址:https://www.cnblogs.com/lyh233/p/14710254.html
Copyright © 2011-2022 走看看