pingcap / pingcap/tidb

Differences in JSON type for casting YEAR and binary

Open
#54,027 1 comment 0 reactions 1 assignee Claimed by @YangKeao View on GitHub
component/json severity/minor sig/sql-infra type/bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.