Details
-
Type:
Bug
-
Status: Stalled (View Workflow)
-
Priority:
Critical
-
Resolution: Unresolved
-
Affects Version/s: 5.5, 10.1, 10.2, 10.3, 10.2.16, 10.3.21, 10.4, 10.5
-
Component/s: Data types
-
Environment:Tested on Debian with 10.3.21 and Gentoo with 10.2.16.
Description
Hi,
today we encountered one strange behavior in an older project. Below are simple SQL statements that quickly show where the problem is.
When combining a number and a number as a string in an IN WHERE condition, it sometimes returns extra unwanted records.
As you can see, condition id = 1234 OR id = "97716021308405775" returns expected 2 records, but equivalent id IN(1234,"97716021308405775") returns 4 records. This unexpected behavior is independent on storage engine - it works the same with InnoDB, MYISAM or TokuDB.
We'll fix our ORM layer to use the IN condition correctly (with either numbers or strings only), but maybe it's a bug in MariaDB that should be fixed. Maybe it's just old, familiar, unexpected behavior that can't be corrected?
DROP TABLE IF EXISTS test;
CREATE TABLE `test` (
`id` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;INSERT IGNORE INTO `test` VALUES(1234),(97716021308405775),(97716021308405770),(97716021308405780);
– OK
SELECT * FROM `test` WHERE `id` IN(97716021308405775);
SELECT * FROM `test` WHERE `id` IN("97716021308405775");
SELECT * FROM `test` WHERE `id` IN("1234",97716021308405775);
SELECT * FROM `test` WHERE `id` IN("1234","97716021308405775");
SELECT * FROM `test` WHERE `id` = 1234 OR id = "97716021308405775";– NOT OK (returns 4 records instead of 2)
SELECT * FROM `test` WHERE `id` IN(1234,"97716021308405775");
SELECT * FROM `test` WHERE `id` IN("97716021308405775",1234);
Attachments
Issue Links
- is blocked by
-
MDEV-22976 CAST(JSON_EXTRACT() AS DECIMAL) does not handle boolean values
-
- Closed
-
- relates to
-
MDEV-25492 BETWEEN clause returns incorrect results on quoted 64-bit ints
-
- Confirmed
-
-
MDEV-25871 compare error bigint to varchar
-
- Closed
-