Differences in JSON type for casting YEAR and binary
- Dominant language
- Go
- Stars
- 40.5k
- Forks
- 6.2k
- PR merge metrics
- PR metrics pending
Description
## Bug Report
### 1. Minimal reproduce step (Required)
```sql
SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci;
WITH tbl AS (SELECT 0x41 v) SELECT v,CAST(v AS JSON), JSON_TYPE(CAST(v AS JSON)) FROM tbl;
WITH tbl AS (SELECT CAST('2024' AS year) v) SELECT v,CAST(v AS JSON), JSON_TYPE(CAST(v AS JSON)) FROM tbl;
```
### 2. What did you expect to see? (Required)
MySQL 8.4.0
```
mysql-8.4.0> WITH tbl AS (SELECT 0x41 v) SELECT v,CAST(v AS JSON), JSON_TYPE(CAST(v AS JSON)) FROM tbl;
+------+----------------------+----------------------------+
| v | CAST(v AS JSON) | JSON_TYPE(CAST(v AS JSON)) |
+------+----------------------+----------------------------+
| 0x41 | "base64:type15:QQ==" | BLOB |
+------+----------------------+----------------------------+
1 row in set (0.00 sec)
mysql-8.4.0> WITH tbl AS (SELECT CAST('2024' AS year) v) SELECT v,CAST(v AS JSON), JSON_TYPE(CAST(v AS JSON)) FROM tbl;
+------+-----------------+----------------------------+
| v | CAST(v AS JSON) | JSON_TYPE(CAST(v AS JSON)) |
+------+-----------------+----------------------------+
| 2024 | 2024 | UNSIGNED INTEGER |
+------+-----------------+----------------------------+
1 row in set (0.01 sec)
```
### 3. What did you see instead (Required)
TiDB v8.1.0
```
mysql-8.0.11-TiDB-v8.1.0> WITH tbl AS (SELECT 0x41 v) SELECT v,CAST(v AS JSON), JSON_TYPE(CAST(v AS JSON)) FROM tbl;
+------+-----------------------+----------------------------+
| v | CAST(v AS JSON) | JSON_TYPE(CAST(v AS JSON)) |
+------+-----------------------+----------------------------+
| 0x41 | "base64:type253:QQ==" | BLOB |
+------+-----------------------+----------------------------+
1 row in set (0.01 sec)
mysql-8.0.11-TiDB-v8.1.0> WITH tbl AS (SELECT CAST('2024' AS year) v) SELECT v,CAST(v AS JSON), JSON_TYPE(CAST(v AS JSON)) FROM tbl;
+------+-----------------+----------------------------+
| v | CAST(v AS JSON) | JSON_TYPE(CAST(v AS JSON)) |
+------+-----------------+----------------------------+
| 2024 | 2024 | INTEGER |
+------+-----------------+----------------------------+
1 row in set (0.00 sec)
```
Note the difference between `type253` and `type15` and `INTEGER` vs `UNSIGNED INTEGER`.
### 4. What is your TiDB version? (Required)
```
Release Version: v8.1.0
Edition: Community
Git Commit Hash: 945d07c5d5c7a1ae212f6013adfb187f2de24b23
Git Branch: HEAD
UTC Build Time: 2024-05-21 03:51:57
GoVersion: go1.21.10
Race Enabled: false
Check Table Before Drop: false
Store: tikv
```
Contributor guide
Assessment
This issue has not been assessed yet.