Bug #81116 | Evaluating between DECIMAL and string returns different result depends on index | ||
---|---|---|---|
Submitted: | 18 Apr 2016 2:14 | Modified: | 18 Apr 2016 7:11 |
Reporter: | Tsubasa Tanaka (OCA) | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: Data Types | Severity: | S2 (Serious) |
Version: | 5.6.30, 5.5.49 | OS: | CentOS (6.7) |
Assigned to: | CPU Architecture: | Any |
[18 Apr 2016 2:14]
Tsubasa Tanaka
[18 Apr 2016 7:11]
MySQL Verification Team
Hello Tanaka-San, Thank you for the report and test case. Observed this with 5.5.49/5.6.30 builds. Thanks, Umesh
[18 Apr 2016 7:11]
MySQL Verification Team
-- 5.5.49 [umshastr@hod03]/export/umesh/server/binaries/mysql-advanced-5.5.49: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.49-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test Database changed mysql> CREATE TABLE xdecimal (id DECIMAL(20)); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243459); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243460); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243461); Query OK, 1 row affected (0.00 sec) mysql> SELECT id FROM xdecimal WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243459 | | 18015376320243460 | | 18015376320243461 | +-------------------+ 3 rows in set (0.00 sec) mysql> ALTER TABLE xdecimal ADD KEY idx_id(id); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SELECT id FROM xdecimal WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243461 | +-------------------+ 1 row in set (0.00 sec) mysql> SELECT id FROM xdecimal IGNORE INDEX(idx_id) WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243459 | | 18015376320243460 | | 18015376320243461 | +-------------------+ 3 rows in set (0.00 sec) -- 5.6.30 mysql> use test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> CREATE TABLE xdecimal (id DECIMAL(20)); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243459); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243460); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243461); Query OK, 1 row affected (0.03 sec) mysql> SELECT id FROM xdecimal WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243459 | | 18015376320243460 | | 18015376320243461 | +-------------------+ 3 rows in set (0.00 sec) mysql> ALTER TABLE xdecimal ADD KEY idx_id(id); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SELECT id FROM xdecimal WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243461 | +-------------------+ 1 row in set (0.00 sec) mysql> SELECT id FROM xdecimal IGNORE INDEX(idx_id) WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243459 | | 18015376320243460 | | 18015376320243461 | +-------------------+ 3 rows in set (0.00 sec) mysql> show variables like '%version%'; +-------------------------+---------------------------------------------------------+ | Variable_name | Value | +-------------------------+---------------------------------------------------------+ | innodb_version | 5.6.30 | | protocol_version | 10 | | slave_type_conversions | | | version | 5.6.30-enterprise-commercial-advanced-log | | version_comment | MySQL Enterprise Server - Advanced Edition (Commercial) | | version_compile_machine | x86_64 | | version_compile_os | linux-glibc2.5 | +-------------------------+---------------------------------------------------------+ 7 rows in set (0.00 sec) -- 5.7.12 [umshastr@hod03]/export/umesh/server/binaries/mysql-advanced-5.7.12: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.12-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> CREATE TABLE `xdecimal` ( -> `id` decimal(20,0) DEFAULT NULL -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243459); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243460); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO xdecimal VALUES (18015376320243461); Query OK, 1 row affected (0.00 sec) mysql> SELECT id FROM xdecimal WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243461 | +-------------------+ 1 row in set (0.00 sec) mysql> ALTER TABLE xdecimal ADD KEY idx_id(id); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SELECT id FROM xdecimal WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243461 | +-------------------+ 1 row in set (0.00 sec) mysql> SELECT id FROM xdecimal WHERE id=18015376320243461; +-------------------+ | id | +-------------------+ | 18015376320243461 | +-------------------+ 1 row in set (0.00 sec) mysql> SELECT id FROM xdecimal IGNORE INDEX(idx_id) WHERE id='18015376320243461'; +-------------------+ | id | +-------------------+ | 18015376320243461 | +-------------------+ 1 row in set (0.00 sec)
[2 May 2016 9:11]
Tor Didriksen
Posted by developer: Duplicate of Bug#18411494 WRONG COMPARSION ON BIG DECIMAL VALUES Bug#72056 Wrong comparsion on big DECIMAL values which is fixed in 5.7.8