对我来说有一个有趣的错误 - 。
请按照我执行的查询进行操作。
一切都很正常。mysql> select hex(current_user());
Result : 726F6F74406C6F63616C686F7374
一切都很正常。
mysql> select substring(hex(current_user()),1,15);
Result : 726F6F74406C6F6
我将null字符串添加到substring方法的第二个和第三个参数。一切都很正常。
mysql> select substring(hex(current_user()),''+1,''+15);
Result : 726F6F74406C6F6
当我将空字符串添加到子字符串的第一个参数时...只返回726.:我期待与我最新查询相同的结果。
mysql> select substring(hex(current_user())+'',1,15);
Result : 726
mysql> select substring(hex(current_user())+'',2,15);
Result : 26
mysql> select substring(hex(current_user())+'',3,15);
Result : 6
mysql> select substring(hex(current_user())+'',4,15);
Result : NULL
我测试了Mysql 5.0.95和5.1.61以及同样的问题..!我用mid函数测试相同的查询而不是substring ..再次相同。
有什么想法吗?我正在研究某种Web应用程序防火墙规则绕过,我意识到了这个错误。
答案 0 :(得分:1)
当你应用'+'运算符时,它正在将HEX转换为整数(通过从HEX中取字符直到第一个非数字字符:726)。并且空字符串也被转换为(整数:0)。
示例:
''+1 => 0+1=1
726F6F74406C6F63616C686F7374+'' => 726+0 = 726
应该使用concat()函数来连接字符串。
答案 1 :(得分:0)
如果你想要可靠的结果,你应该使用concat ......
SELECT hex(current_user()),
hex(current_user())+'',
substring(hex(current_user())+'',1,15),
concat(hex(current_user()), ''),
substring(concat(hex(current_user()), ''),1,15);