好的,这是世界上最简单的查询,它在某种程度上失败了。
SELECT * FROM kal_auth.dbo.Login WHERE ID = 'Zen' AND PWD = CONVERT(varchar,'0x9248FEFE237DB009')
0x9248FEFE237DB009
不是十六进制,虽然它看起来像。但它转换为“密码”
我知道这一行存在,而且只有密码字段没有返回结果,这是通过隔离和测试来学习的。
PWD字段是varchar(16)。
我不明白这一点。
答案 0 :(得分:3)
我可能在这里遗漏了一些东西......
CONVERT(varchar,'0x9248FEFE237DB009')的结果与18个字符的'0x9248FEFE237DB009'相同,不是吗?那怎么可能等于16个字符的密码呢?
答案 1 :(得分:3)
使用
SELECT CONVERT(VARCHAR,0x9248FEFE237DB009) -- returns ’Hþþ#}°
不
SELECT CONVERT(varchar,'0x9248FEFE237DB009') -- returns 0x9248FEFE237DB009
通过将其包含在引号中,它被视为字符串而不是二进制数据,这意味着转换为varchar不会执行任何操作!