| Bug #67427 | Conversion from INT to STRING is causing a like comparison where an equals was u | ||
|---|---|---|---|
| Submitted: | 30 Oct 2012 20:20 | Modified: | 13 Nov 2012 19:15 |
| Reporter: | adam steele | Email Updates: | |
| Status: | Not a Bug | Impact on me: | |
| Category: | MySQL Server | Severity: | S2 (Serious) |
| Version: | 5.6 | OS: | Any (Conversion issue from INT to STR) |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | conversion, INTEGER, string | ||
[30 Oct 2012 20:20]
adam steele
[30 Oct 2012 20:55]
Peter Laursen
Not reproducible for me on neither 5.6.7 nor 5.5.28:
DROP TABLE IF EXISTS `bugxx`;
CREATE TABLE `bugxx` (
`id` int(11) DEFAULT NULL,
`account` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `bugxx` */
insert into `bugxx`(`id`,`account`) values (1,'1');
insert into `bugxx`(`id`,`account`) values (2,'12');
SELECT * FROM bugxx WHERE account = 1
/*returns
id account
------ ---------
1 1
*/
-- Peter(not a MySQL/Oracle person)
[30 Oct 2012 21:18]
MySQL Verification Team
I couldn't repeat the described problem on 5.5.28 or 5.6.7. Can you send us the output of this when run at the mysql command line client? drop table if exists t1; create table t1(a int,b varchar(10),key(b))engine=myisam; insert into t1 values (1,'1'),(2,'12'),(3,'123'),(4,'1234'); select * from t1 where b like '1%'; select * from t1 force index(b) where b = 1; select * from t1 ignore index(b) where b = 1; alter table t1 engine=innodb; select * from t1 where b like '1%'; select * from t1 force index(b) where b = 1; select * from t1 ignore index(b) where b = 1; select version();
[31 Oct 2012 17:09]
adam steele
Ok so I was able to repeat this again but under very particular circumstances.
CREATE TABLE `bugs` (
`id` int(11) NOT NULL,
`test` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO bugs (test) values ("1234");
INSERT INTO bugs (test) values ("1234-0");
INSERT INTO bugs (test) values ("1234-1");
INSERT INTO bugs (test) values ("1234-2");
INSERT INTO bugs (test) values ("1234-3");
INSERT INTO bugs (test) values ("1234-4");
select * from bugs where test = 1
null
select * from bugs where test = 12
null
select * from bugs where test = 123
null
select * from bugs where test = 1234 // where test LIKE '1234%'
id | test
1 1234
2 1234-0
3 1234-1
4 1234-2
5 1234-3
6 1234-4
select * from bugs where test = '1234'
id | test
1 1234
[3 Nov 2012 9:21]
Hartmut Holzgraefe
Expected, or at least documented, behavior: http://dev.mysql.com/doc/refman/5.5/en/type-conversion.html When an operator is used with operands of different types, type conversion occurs to make the operands compatible. Some conversions occur implicitly. [...] The following rules describe how conversion occurs for comparison operations: [...] * In all other cases, the arguments are compared as floating-point (real) numbers. Trailing non-numeric characters are ignored in string to float conversion, so e.g. 3.14 = "3.14 is Pi" evaluates to true
[13 Nov 2012 19:15]
Sveta Smirnova
Thank you for the report. Hartmut is absolutely correct: this is documented behavior and not a bug.
