Bug #40187 | bit comparison against string literal is inconsistent | ||
---|---|---|---|
Submitted: | 20 Oct 2008 19:43 | Modified: | 21 Oct 2008 4:08 |
Reporter: | Jess Balint | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: Data Types | Severity: | S3 (Non-critical) |
Version: | 5.0.62, 5.1.28 | OS: | Any |
Assigned to: | Assigned Account | CPU Architecture: | Any |
[20 Oct 2008 19:43]
Jess Balint
[21 Oct 2008 4:08]
Valeriy Kravchuk
I've got the same result with 5.1.28 also: C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot -P3310 test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.28-rc-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create table bitx (d bit(30)); Query OK, 0 rows affected (0.52 sec) mysql> insert into bitx values(b'01000001'); Query OK, 1 row affected (0.17 sec) mysql> select bin(d),d,d='A' as 'cmp bit field',d=b'01000001',b'01000001'='A' -> as 'cmp bit literal' from bitx; +---------+------+---------------+---------------+-----------------+ | bin(d) | d | cmp bit field | d=b'01000001' | cmp bit literal | +---------+------+---------------+---------------+-----------------+ | 1000001 | A | 0 | 1 | 1 | +---------+------+---------------+---------------+-----------------+ 1 row in set, 1 warning (0.73 sec) But note the warning: mysql> show warnings\G *************************** 1. row *************************** Level: Warning Code: 1292 Message: Truncated incorrect DOUBLE value: 'A' 1 row in set (0.03 sec) So, looks like bit column and character literal were compared as DOUBLE, as manual says (http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html): "In all other cases, the arguments are compared as floating-point (real) numbers." But I'd expect values to be compared as bits or as strings in this case, so I still consider this a bug. Workaround is: hex(d) = hex('A') ...