Mysql 选择“-”的含义是什么

Mysql 选择“-”的含义是什么,mysql,sql,Mysql,Sql,有一篇关于SQL注入的文章: 问题是,“选择-”的含义是什么?我使用MySQL进行了尝试,它返回: mysql> select ''-''; +-------+ | ''-'' | +-------+ | 0 | +-------+ 1 row in set (0.00 sec) 发生了什么事?这是什么意思 以及选择“-”的结果: 我对这些结果感到非常困惑。是一个空字符串;-这是减法。所以你要从一个空字符串中减去另一个空字符串。减法是一个数字运算符,所以它的结果是一个数字,mys

有一篇关于SQL注入的文章:

问题是,“选择-”的含义是什么?我使用MySQL进行了尝试,它返回:

mysql> select ''-'';
+-------+
| ''-'' |
+-------+
|     0 |
+-------+
1 row in set (0.00 sec)
发生了什么事?这是什么意思

以及选择“-”的结果:

我对这些结果感到非常困惑。

是一个空字符串;-这是减法。所以你要从一个空字符串中减去另一个空字符串。减法是一个数字运算符,所以它的结果是一个数字,mysql在减法之前将其参数转换为数字。的数值为零-但这并不重要,因为从其自身减去的任何数字都将得到零。

我将解释select-,它与select-,as select cast as int-cast as int,它是select 0-0

使用select“-”可以得到一个字符串。希望这有意义

从一个空字符串减到另一个空字符串:

见下文:

mysql> select '';
+--+
|  |
+--+
|  |
+--+
1 row in set (0.00 sec)  

mysql> select '3'-'2';
+---------+
| '3'-'2' |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)
但警告:如果不是数字字符串:

两个警告:

mysql> SHOW WARNINGS LIMIT 2
    -> ;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'b' |
+---------+------+---------------------------------------+
2 rows in set (0.00 sec)  
为什么没有空字符串的警告

其中,由于空字符串的内容为0,因此没有警告,请参见以下内容:

mysql> SELECT 0 = '';
+--------+
| 0 = '' |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)   
因此,通过做-你正在做0-0

更清楚地说,我添加了以下示例,我觉得这对您很有帮助: 转换如何发生:

mysql> SELECT '0' = 0
    -> ;
+---------+
| '0' = 0 |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)  
请注意其转换:

mysql> SELECT '' = '0'
    -> ;
+----------+
| '' = '0' |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)  
已转换为0,“0”已转换为0但不等于“0”

mysql> SELECT '' - '';
+---------+
| '' - '' |
+---------+
|       0 |
+---------+
1 row in set (0.00 sec)  
mysql> SELECT '0' = 0
    -> ;
+---------+
| '0' = 0 |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)  
mysql> SELECT '' = '0'
    -> ;
+----------+
| '' = '0' |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)  
mysql> SELECT '1' = 1
    -> ;
+---------+
| '1' = 1 |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

mysql> SELECT '' = 1
    -> ;
+--------+
| '' = 1 |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)