pingcap / pingcap/tidb

The returned datatype of case when is inconsistent with mysql

Open
#61,117 0 comments 0 reactions 0 assignees View on GitHub
severity/moderate sig/execution type/bug
Dominant language
Go
Stars
40.5k
Forks
6.2k
PR merge metrics
PR metrics pending

Description

## Bug Report

Please answer these questions before submitting your issue. Thanks!

### 1. Minimal reproduce step (Required)
```
select case false when true then 1.19999999999 else 1 end ;
```
### 2. What did you expect to see? (Required)
results from mysql
```
MySQL [fuzztest]> select case false when true then 1.19999999999 else 1 end ;
+----------------------------------------------------+
| case false when true then 1.19999999999 else 1 end |
+----------------------------------------------------+
| 1 |
+----------------------------------------------------+
1 row in set (0.00 sec)
```

### 3. What did you see instead (Required)
results from tidb
```
MySQL [test1]> select case false when true then 1.19999999999 else 1 end ;
+----------------------------------------------------+
| case false when true then 1.19999999999 else 1 end |
+----------------------------------------------------+
| 1.00000000000 |
+----------------------------------------------------+
1 row in set (0.01 sec)
```

### 4. What is your TiDB version? (Required)
```
MySQL [test1]> select tidb_version();
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tidb_version() |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Release Version: v8.5.1
Edition: Community
Git Commit Hash: fea86c8e35ad4a86a5e1160701f99493c2ee547c
Git Branch: HEAD
UTC Build Time: 2025-01-16 07:38:34
GoVersion: go1.23.4
Race Enabled: false
Check Table Before Drop: false
Store: tikv |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
```

Contributor guide

Open the contributing guide

Research direction

Start by running the reported CASE query in TiDB and MySQL and compare the result types and displayed values. Trace the CASE expression's type inference and numeric result handling; done means TiDB matches MySQL for this reproduction without regressing related CASE expressions.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, mysql, sql
Domain
databases
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.