Description:
Hi,
In the following test case, there is a prepared SELECT query, and an equivalent normal SELECT query. But they have inconsistent results.
```
CREATE TABLE t1(c0 DECIMAL ZEROFILL) ;
INSERT IGNORE INTO t1(c0) VALUES(0);
SELECT COALESCE(t1.c0, NULL) LIKE (0), c0 FROM t1; -- 1 0000000000
SET @a = NULL;
PREPARE prepare_query FROM 'SELECT COALESCE(t1.c0, ?) LIKE (0), c0 FROM t1';
EXECUTE prepare_query USING @a; -- 0 0000000000
```
Then I got the result of COALESCE and found the type of c0 is changed in the prepared statement:
```
SELECT COALESCE(t1.c0, NULL), c0 FROM t1; -- 0 0000000000
SET @a = NULL;
PREPARE prepare_query FROM 'SELECT COALESCE(t1.c0, ?), c0 FROM t1';
EXECUTE prepare_query USING @a; -- 0.000000000000000000000000000000 0000000000
```
How to repeat:
```
CREATE TABLE t1(c0 DECIMAL ZEROFILL) ;
INSERT IGNORE INTO t1(c0) VALUES(0);
SELECT COALESCE(t1.c0, NULL) LIKE (0), c0 FROM t1; -- 1 0000000000
SET @a = NULL;
PREPARE prepare_query FROM 'SELECT COALESCE(t1.c0, ?) LIKE (0), c0 FROM t1';
EXECUTE prepare_query USING @a; -- 0 0000000000
```
```
SELECT COALESCE(t1.c0, NULL), c0 FROM t1; -- 0 0000000000
SET @a = NULL;
PREPARE prepare_query FROM 'SELECT COALESCE(t1.c0, ?), c0 FROM t1';
EXECUTE prepare_query USING @a; -- 0.000000000000000000000000000000 0000000000
```