V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
claysec
V2EX  ›  程序员

求解 Mysql 这样的字段是怎么判断的呢

  •  
  •   claysec ·
    boku7 · Oct 30, 2019 · 3092 views
    This topic created in 2371 days ago, the information mentioned may be changed or developed.

    我们进行验证密码的时候最常用的方法是 “=” 列入

    SELECT * FROM admin WHERE name = 'admin' and password = "123456"
    

    假设现在用 < 或者 > 在 password 字段进行判断会出现很奇怪的结果。 https://i.imgur.com/BMugQCK.png

    1 不行,大于 2 就可以了。小弟不知道他是怎么判断的。一直没有搞懂。 这是我的数据库 Imgur

    求大神帮忙

    25 replies    2019-10-31 13:31:25 +08:00
    haiyang416
        1
    haiyang416  
       Oct 30, 2019
    那你为什么要用 < 和 > 来比较字符串呢?
    claysec
        2
    claysec  
    OP
       Oct 30, 2019
    @haiyang416 就好奇心。尝试了一下,结果发现逻辑新世界(ε=ε=ε=┏(゜ロ゜;)┛
    U7Q5tLAex2FI0o0g
        3
    U7Q5tLAex2FI0o0g  
       Oct 30, 2019   ❤️ 1
    然而最常用的方法并不是 name = 'admin' and password = "123456"

    1、SELECT password FROM admin WHERE name = 'admin'
    2、password_verify('123456 表单填的', '数据库取出来的加密过的')
    claysec
        4
    claysec  
    OP
       Oct 30, 2019
    纯属探讨,只想弄明白是怎么判断的,不用于业务,想法是脑子一热想到的。就觉得很奇怪而已
    claysec
        5
    claysec  
    OP
       Oct 30, 2019
    @littleylv 假设一下,哈哈哈哈😁
    crazytudou
        6
    crazytudou  
       Oct 30, 2019
    0.0,sql 本来就是字符串比对大小
    claysec
        7
    claysec  
    OP
       Oct 30, 2019 via iPhone
    @crazytudou 主要这个还牵扯到一个 ctf 的题目,说能跑出数据
    chendy
        8
    chendy  
       Oct 30, 2019
    字符串本来就能比较,能排序啊…
    claysec
        9
    claysec  
    OP
       Oct 30, 2019 via iPhone
    @chendy emmmm。我知道能比较。但是我关心的是怎么比较的
    claysec
        10
    claysec  
    OP
       Oct 30, 2019 via iPhone
    那如果是字符串和字符串进行比较。那大于小于号是怎么进行对比的呢?
    noctisnkt
        11
    noctisnkt  
       Oct 30, 2019   ❤️ 1
    mysql 的字符串比较是如果长度相等,则比较相同位置的字符。长度不等,转成 ASCII 码比较
    claysec
        12
    claysec  
    OP
       Oct 30, 2019 via iPhone
    @noctisnkt 感谢我去试试
    akira
        13
    akira  
       Oct 30, 2019
    字符串比较 一般编程书都会讲
    jwenjian
        14
    jwenjian  
       Oct 30, 2019 via iPhone
    Ascii
    augustpluscn
        15
    augustpluscn  
       Oct 30, 2019
    3 楼正解吧。。。。
    kosmosr
        17
    kosmosr  
       Oct 30, 2019   ❤️ 1
    @kosmosr 比的是首位的 ascii 码
    claysec
        18
    claysec  
    OP
       Oct 30, 2019 via iPhone
    @kosmosr 谢谢大佬
    taogen
        19
    taogen  
       Oct 31, 2019 via Android
    @kosmosr 不一定是 ASCII 编码,varchar 和 char 支持中文,我猜应该是 Unicode 编码。
    laminux29
        20
    laminux29  
       Oct 31, 2019
    楼主,我给你两个字符串:

    "屎好吃"

    "屎不好吃"

    你用大于小于来比较一个试试?
    claysec
        21
    claysec  
    OP
       Oct 31, 2019 via iPhone
    @laminux29 那你想要我表达什么呢?
    claysec
        22
    claysec  
    OP
       Oct 31, 2019 via iPhone
    @taogen 11 楼是答案。已经弄明白了(滑稽
    a7217107
        23
    a7217107  
       Oct 31, 2019
    跟字符串长度无关,比较的是字符串的编码,可能是 Unicode (因为有中文),从首位开始比较,相同则比较下一位,不同则返回对应的 true or false
    silenceeeee
        24
    silenceeeee  
       Oct 31, 2019
    google mysql collate
    claysec
        25
    claysec  
    OP
       Oct 31, 2019
    @a7217107 比的是 ascii 码。#16 已经很清楚啦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5064 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 09:47 · PVG 17:47 · LAX 02:47 · JFK 05:47
    ♥ Do have faith in what you're doing.