Bug #79929 Func CASE WHEN truncates unsigned value to signed
Submitted: 12 Jan 2016 9:08 Modified: 9 Dec 2019 21:55
Reporter: Su Dylan Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: DML Severity:S3 (Non-critical)
Version:5.7.8, 5.5.48, 5.6.28, 5.7.10 OS:Any
Assigned to: CPU Architecture:Any

[12 Jan 2016 9:08] Su Dylan
Description:
Output:
=====
mysql> select case when true then 18446744073709551615 else 0 end;
+-----------------------------------------------------+
| case when true then 18446744073709551615 else 0 end |
+-----------------------------------------------------+
|                                                  -1 |
+-----------------------------------------------------+
1 row in set (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.8-rc  |
+-----------+
1 row in set (0.00 sec)

Problem:
=====
18446744073709551615  is expected. 

How to repeat:
select case when true then 18446744073709551615 else 0 end;

Suggested fix:
18446744073709551615  is returned.
[12 Jan 2016 10:49] MySQL Verification Team
Hello Su Dylan,

Thank you for the report and test case.
Observed that 5.5.48/5.6.28/5.7.10 are affected.

Thanks,
Umesh
[13 Jan 2016 13:34] Tor Didriksen
Posted by developer:
 
You need to convert the zero to unsigned

mysql> select case when true then 18446744073709551615 else convert(0, unsigned) end;
+------------------------------------------------------------------------+
| case when true then 18446744073709551615 else convert(0, unsigned) end |
+------------------------------------------------------------------------+
|                                                   18446744073709551615 |
+------------------------------------------------------------------------+
[9 Dec 2019 21:55] Roy Lyseng
Posted by developer:
 
Fixed in 8.0.18