Bug #119048 inconsistent result of two equivalent query with operator ~
Submitted: 21 Sep 12:57 Modified: 22 Sep 17:47
Reporter: chi zhang Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Prepared statements Severity:S2 (Serious)
Version:9.4.0 OS:Any
Assigned to: CPU Architecture:Any

[21 Sep 12:57] chi zhang
Description:
Hi,

The following two queries are consistent, however, they produce inconsistent result.

SELECT (((- ((~ ('a')))))AND(TRUE)); 
(((- ((~ ('a')))))AND(TRUE))
1

SET @a = 'a';
PREPARE prepare_query FROM "SELECT (((- ((~ (?)))))AND(TRUE))";
EXECUTE prepare_query USING @a;
(((- ((~ (?)))))AND(TRUE))
0

How to repeat:
SELECT (((- ((~ ('a')))))AND(TRUE));
SET @a = 'a';
PREPARE prepare_query FROM "SELECT (((- ((~ (?)))))AND(TRUE))";
EXECUTE prepare_query USING @a;
[22 Sep 17:47] MySQL Verification Team
mysql> SELECT (((- ((~ ('a')))))AND(TRUE)); 
+------------------------------+
| (((- ((~ ('a')))))AND(TRUE)) |
+------------------------------+
|                            1 |
+------------------------------+
1 row in set, 2 warnings (0.000 sec)

mysql> SET @a = 'a';
Query OK, 0 rows affected (0.001 sec)

mysql> PREPARE prepare_query FROM "SELECT (((- ((~ (?)))))AND(TRUE))";
Query OK, 0 rows affected (0.001 sec)
Statement prepared

mysql> EXECUTE prepare_query USING @a;
+----------------------------+
| (((- ((~ (?)))))AND(TRUE)) |
+----------------------------+
|                          0 |
+----------------------------+
1 row in set (0.000 sec)

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 9.4.0     |
+-----------+
1 row in set (0.000 sec)