[MDEV-15946] MEDIUMINT(N<8) creates a wrong data type on conversion to string Created: 2018-04-20  Updated: 2018-04-23  Resolved: 2018-04-23

Status: Closed
Project: MariaDB Server
Component/s: Data types
Affects Version/s: 5.5, 10.0, 10.1, 10.2, 10.3
Fix Version/s: 10.3.7

Type: Bug Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Blocks
blocks MDEV-4912 Data type plugin API version 1 Closed
Relates
relates to MDEV-13232 Assertion `(&(&share->intern_lock)->m... Closed
relates to MDEV-15926 MEDIUMINT returns wrong I_S attributes Closed

 Description   

The MEDIUMINT type has the following characteristics depending on signess:

MEDIUMINT SIGNED    -8388608..8388607   (7 digits,  8 characters)
MEDIUNINT UNSIGNED        0..16777215   (8 digits,  8 characters)

But these characteristics are not taken into account precisely:

CREATE OR REPLACE TABLE t1 (a MEDIUMINT(2), b MEDIUMINT(2) UNSIGNED);
CREATE OR REPLACE TABLE t2 AS SELECT CONCAT(a),CONCAT(b) FROM t1;
DESC t2;

+-----------+------------+------+-----+---------+-------+
| Field     | Type       | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| CONCAT(a) | varchar(9) | YES  |     | NULL    |       |
| CONCAT(b) | varchar(8) | YES  |     | NULL    |       |
+-----------+------------+------+-----+---------+-------+

For INT-alike data types, the specified length does not constrain the supported type range. So MEDIUMINT(2) still supports the entire MEDIUMINT range (as mentioned above). But in all cases, the maximum possible length on conversion to string is 8, for both signed and unsigned variants.

The column corresponding to the MEDIUMINT SIGNED erroneously creates a varchar(9) on conversion to string. The expected result is varchar(8).


Generated at Thu Feb 08 08:25:12 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.