Bug #13347 empty result from query with like and cp1250 charset
| Submitted: | 20 Sep 2005 11:13 | Modified: | 31 Oct 2005 19:54 |
|---|---|---|---|
| Reporter: | [ name withheld ] | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 4.1.13-log/5.0 BK source | OS: | Linux (Gentoo Linux mysql-4.1.13-r1, x8) |
| Assigned to: | Alexander Barkov | CPU Architecture: | Any |
[20 Sep 2005 12:43]
[ name withheld ]
I think, this problem is related to cp1250 charset. With utf8 charset and collate works fine. CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `str` varchar(32) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `str` (`str`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; mysql> explain select * from test where str like 'a%'; +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | test | ALL | str | NULL | NULL | NULL | 7 | Using where | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec) mysql> select * from test where str like 'a%'; +----+---------+ | id | str | +----+---------+ | 1 | a | | 2 | aa | | 3 | aaa | | 4 | aaaa | | 5 | aaaaa | | 6 | aaaaaa | | 7 | aaaaaaa | +----+---------+ 7 rows in set (0.00 sec)
[20 Sep 2005 12:47]
MySQL Verification Team
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.15-debug-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SET character_set_client = cp1250;
Query OK, 0 rows affected (0.06 sec)
mysql> SET character_set_results = cp1250;
Query OK, 0 rows affected (0.00 sec)
mysql> SET character_set_connection = cp1250;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> DROP TABLE IF EXISTS `test`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE TABLE `test` (
-> `id` INT AUTO_INCREMENT PRIMARY KEY,
-> `str` VARCHAR(32) COLLATE cp1250_czech_cs NOT NULL default '',
-> UNIQUE KEY (`str`)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql>
mysql> INSERT INTO `test` VALUES (NULL, 'a');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `test` VALUES (NULL, 'aa');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `test` VALUES (NULL, 'aaa');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `test` VALUES (NULL, 'aaaa');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `test` VALUES (NULL, 'aaaaa');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `test` VALUES (NULL, 'aaaaaa');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO `test` VALUES (NULL, 'aaaaaaa');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test where str like 'aa%';
Empty set (0.01 sec)
mysql> select * from test where str COLLATE cp1250_czech_cs like 'aa%';
+----+---------+
| id | str |
+----+---------+
| 2 | aa |
| 3 | aaa |
| 4 | aaaa |
| 5 | aaaaa |
| 6 | aaaaaa |
| 7 | aaaaaaa |
+----+---------+
6 rows in set (0.00 sec)
mysql>
[22 Sep 2005 15:25]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/30224
[25 Oct 2005 9:55]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/31439
[27 Oct 2005 10:54]
Alexander Barkov
Fixed in 4.1.16.
[31 Oct 2005 19:54]
Paul DuBois
Noted in 4.1.16 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.056 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: query: SELECT * FROM test WHERE str LIKE 'a%' returns empty set, but query SELECT * FROM test WHERE str COLLATE cp1250_czech_cs like 'a%' works as excepted, but don't use index How to repeat: test data: SET character_set_client = cp1250; SET character_set_results = cp1250; SET character_set_connection = cp1250; DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `str` VARCHAR(32) COLLATE cp1250_czech_cs NOT NULL default '', UNIQUE KEY (`str`) ); INSERT INTO `test` VALUES (NULL, 'a'); INSERT INTO `test` VALUES (NULL, 'aa'); INSERT INTO `test` VALUES (NULL, 'aaa'); INSERT INTO `test` VALUES (NULL, 'aaaa'); INSERT INTO `test` VALUES (NULL, 'aaaaa'); INSERT INTO `test` VALUES (NULL, 'aaaaaa'); INSERT INTO `test` VALUES (NULL, 'aaaaaaa'); results from queries: mysql> select * from test where str like 'aa%'; Empty set (0.00 sec) mysql> explain select * from test where str like 'aa%'; +----+-------------+-------+-------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | test | range | str | str | 32 | NULL | 1 | Using where | +----+-------------+-------+-------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec) this query returns empty set, but rows from explain is 1. Rows in table that match 'LIKE 'a%' is 6. mysql> select * from test where str COLLATE cp1250_czech_cs like 'aa%'; +----+---------+ | id | str | +----+---------+ | 2 | aa | | 3 | aaa | | 4 | aaaa | | 5 | aaaaa | | 6 | aaaaaa | | 7 | aaaaaaa | +----+---------+ 6 rows in set (0.00 sec) mysql> explain select * from test where str COLLATE cp1250_czech_cs like 'aa%'; +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | test | ALL | NULL | NULL | NULL | NULL | 7 | Using where | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec) This query works, but don't use an index. Rows count from EXPLAIN is 7 not 6 (as before +1 i think)