mysql 字串和數字比,字串會隱式轉換為數字0

czxin788發表於2022-07-15

在mysql中,字串和數字比,字串會被轉成數字0。

下面我演示:

mysql> create table t (a int primary key, b int,c int, d int, index idx_b_c_d (b,c,d));
Query OK, 0 rows affected (0.14 sec)
mysql> insert into t values (0,0,0,0),(1,1,1,1),(2,2,2,2),(3,3,3,3);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
mysql> select  * from t;
+---+------+------+------+
| a | b    | c    | d    |
+---+------+------+------+
| 0 |    0 |    0 |    0 |
| 1 |    1 |    1 |    1 |
| 2 |    2 |    2 |    2 |
| 3 |    3 |    3 |    3 |
+---+------+------+------+
4 rows in set (0.00 sec)

下面演示奇怪現象:

mysql> select  * from t where a=1;
+---+------+------+------+
| a | b    | c    | d    |
+---+------+------+------+
| 1 |    1 |    1 |    1 |
+---+------+------+------+
1 row in set (0.00 sec)
mysql> select  * from t where a='t';
+---+------+------+------+
| a | b    | c    | d    |
+---+------+------+------+
| 0 |    0 |    0 |    0 |
+---+------+------+------+
1 row in set, 1 warning (0.00 sec)
mysql> select  * from t where a='ttt';
+---+------+------+------+
| a | b    | c    | d    |
+---+------+------+------+
| 0 |    0 |    0 |    0 |
+---+------+------+------+
1 row in set, 1 warning (0.00 sec)
mysql> select  * from t where a='bbb';
+---+------+------+------+
| a | b    | c    | d    |
+---+------+------+------+
| 0 |    0 |    0 |    0 |
+---+------+------+------+
1 row in set, 1 warning (0.00 sec)

可以看到,where a='bbb' 能查出a=0的行,這就是因為mysql把字串bbb轉成了數字0。

透過下面可以驗證,1表示為真,0表示為假:

mysql> select  'ttt'=0;
+---------+
| 'ttt'=0 |
+---------+
|       1 |
+---------+
1 row in set, 1 warning (0.01 sec)
mysql> select  'ttt'=1;
+---------+
| 'ttt'=1 |
+---------+
|       0 |
+---------+
1 row in set, 1 warning (0.00 sec)
mysql> select  'bbb'=1;
+---------+
| 'bbb'=1 |
+---------+
|       0 |
+---------+
1 row in set, 1 warning (0.00 sec)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2905961/,如需轉載,請註明出處,否則將追究法律責任。