Bug #19080 | Sub_part indexes on utf8 varchar fields are broken for UPDATE | ||
---|---|---|---|
Submitted: | 13 Apr 2006 17:52 | Modified: | 8 May 2006 19:17 |
Reporter: | Gian-Carlo Pascutto | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
Version: | 4.1.18-0/4.1BK | OS: | Linux (Red Hat Enterprise 3 (x86)) |
Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
[13 Apr 2006 17:52]
Gian-Carlo Pascutto
[13 Apr 2006 20:47]
MySQL Verification Team
Thank you for the bug report. Could you please provide a dump file for insert data? Thanks in advance.
[13 Apr 2006 22:06]
Gian-Carlo Pascutto
I don't know if it's of any help, but the following may be relevant: http://bugs.mysql.com/bug.php?id=14056 http://bugs.mysql.com/bug.php?id=4521
[14 Apr 2006 21:20]
Gian-Carlo Pascutto
Some more, similar breakage: songs is also an utf8 table with sub_part indexes mysql> SELECT COUNT(*) FROM songs WHERE album IN ('S&M (Disc 1)'); +----------+ | COUNT(*) | +----------+ | 12 | +----------+ 1 row in set (0.00 sec) mysql> SELECT COUNT(*) FROM songs WHERE album IN ('S&M (Disc 1)', 'MySQL ate My query'); +----------+ | COUNT(*) | +----------+ | 0 | +----------+ 1 row in set (0.03 sec) After dropping the index on albums: mysql> SELECT COUNT(*) FROM songs WHERE album IN ('S&M (Disc 1)', 'MySQL ate My query'); +----------+ | COUNT(*) | +----------+ | 12 | +----------+ 1 row in set (0.47 sec)
[17 Apr 2006 14:37]
MySQL Verification Team
Thank you for the feedback. With your original test I was unable to repeat (validation_id='3748bf1f5bc031fb777fb6bc8476ea5a' not exists) then I tried with another one: miguel@hegel:~/dbs/4.1> bin/mysql -uroot db19 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 to server version: 4.1.19-debug-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show create table users\G *************************** 1. row *************************** Table: users Create Table: CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(32) collate utf8_unicode_ci NOT NULL default '', `password` varchar(32) collate utf8_unicode_ci NOT NULL default '', `sha256_password` varchar(64) collate utf8_unicode_ci NOT NULL default '', `email` varchar(128) collate utf8_unicode_ci NOT NULL default '', `verified` tinyint(3) unsigned NOT NULL default '0', `validation_id` varchar(32) collate utf8_unicode_ci NOT NULL default '', `pubstats` tinyint(3) unsigned NOT NULL default '0', `lastsub` datetime NOT NULL default '1500-01-01 00:00:00', `regtime` datetime NOT NULL default '1500-01-01 00:00:00', `playcount` int(10) unsigned NOT NULL default '0', `timecount` bigint(20) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `name` (`name`), KEY `validation_id` (`validation_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 1 row in set (0.00 sec) mysql> select id from users WHERE validation_id='f1861d224d31df52586103f701e1b462'; +----+ | id | +----+ | 19 | +----+ 1 row in set (0.00 sec) mysql> UPDATE users SET verified=1 WHERE validation_id='f1861d224d31df52586103f701e1b462'; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> SELECT version(); +------------------+ | version() | +------------------+ | 4.1.19-debug-log | +------------------+ 1 row in set (0.00 sec) mysql> Could you please give me an upadate failed using your dump data for to test again. Thanks inadvance.
[17 Apr 2006 14:48]
Gian-Carlo Pascutto
Perform: DROP INDEX validation_id ON users; CREATE INDEX validation_id ON users(validation_id(10)); And try again. The problem does not exist when the index is created on the entire field. (This is described in the original bug report, BTW).
[17 Apr 2006 15:08]
MySQL Verification Team
Thank you for the feedback. How mentioned not affects 5.0. mysql> DROP INDEX validation_id ON users; Query OK, 790 rows affected (0.06 sec) Records: 790 Duplicates: 0 Warnings: 0 mysql> CREATE INDEX validation_id ON users(validation_id(10)); Query OK, 790 rows affected (0.06 sec) Records: 790 Duplicates: 0 Warnings: 0 mysql> select id from users WHERE validation_id='f1861d224d31df52586103f701e1b462'; +----+ | id | +----+ | 19 | +----+ 1 row in set (0.00 sec) mysql> UPDATE users SET verified=1 WHERE validation_id='f1861d224d31df52586103f701e1b462'; Query OK, 0 rows affected (0.01 sec) Rows matched: 0 Changed: 0 Warnings: 0 mysql> select version(); +------------------+ | version() | +------------------+ | 4.1.19-debug-log | +------------------+ 1 row in set (0.01 sec) mysql> ------------------------------------------------------------------ mysql> DROP INDEX validation_id ON users; Query OK, 790 rows affected (0.06 sec) Records: 790 Duplicates: 0 Warnings: 0 mysql> CREATE INDEX validation_id ON users(validation_id(10)); Query OK, 790 rows affected (0.07 sec) Records: 790 Duplicates: 0 Warnings: 0 mysql> select id from users WHERE validation_id='f1861d224d31df52586103f701e1b462'; +----+ | id | +----+ | 19 | +----+ 1 row in set (0.02 sec) mysql> UPDATE users SET verified=1 WHERE validation_id='f1861d224d31df52586103f701e1b462'; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> select version(); +--------------+ | version() | +--------------+ | 5.0.21-debug | +--------------+ 1 row in set (0.00 sec) mysql>
[26 Apr 2006 11:34]
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/commits/5562
[27 Apr 2006 7:22]
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/commits/5624
[4 May 2006 16:36]
Paul DuBois
Please provide the three-part version number(s) for the fix. Thanks.
[5 May 2006 9:48]
Georgi Kodinov
The fix is pushed in 4.1.19 and 5.0.22
[8 May 2006 19:17]
Paul DuBois
Noted in 4.1.19, 5.0.22 changelogs. Index prefixes for <literal>utf8</literal> <literal>VARCHAR</literal> columns did not work for <literal>UPDATE</literal> statements. (Bug #19080)