| Bug #30485 | UPDATE Fails but Select works | ||
|---|---|---|---|
| Submitted: | 17 Aug 2007 20:21 | Modified: | 29 Aug 2007 15:59 |
| Reporter: | Dathan Pattishall | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | MySQL Server: InnoDB storage engine | Severity: | S1 (Critical) |
| Version: | 4.1.23 | OS: | Any (2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:56:28 EST 2006 x86_64 x86_64 x86_64 GNU/Linux) |
| Assigned to: | Assigned Account | CPU Architecture: | Any |
| Tags: | 4.1, fails, SELECT, UPDATE | ||
[17 Aug 2007 20:21]
Dathan Pattishall
[17 Aug 2007 20:23]
Dathan Pattishall
A work around is to do UPDATE GiftCodes Set col=1 WHERE code LIKE 'foo';
[17 Aug 2007 20:23]
Dathan Pattishall
Also this behavior changed from 4.1.22 to 4.1.23
[17 Aug 2007 22:14]
MySQL Verification Team
Thank you for the bug report.
[miguel@skybr 4.1]$ bin/mysql -uroot db77
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.24-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE `GiftCodes` (
-> `code` varchar(32) collate utf8_bin NOT NULL default '',
-> `used_by_id` bigint(10) unsigned NOT NULL default '0',
-> PRIMARY KEY (`code`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> insert into GiftCodes values ('foo',7);
Query OK, 1 row affected (0.00 sec)
mysql> select * from GiftCodes where code='foo';
+------+------------+
| code | used_by_id |
+------+------------+
| foo | 7 |
+------+------------+
1 row in set (0.00 sec)
mysql> update GiftCodes set used_by_id='1' where code='foo';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
mysql> select * from GiftCodes where code='foo';
+------+------------+
| code | used_by_id |
+------+------------+
| foo | 7 |
+------+------------+
1 row in set (0.00 sec)
mysql> alter table GiftCodes engine=MyISAM;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> update GiftCodes set used_by_id='1' where code='foo';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from GiftCodes where code='foo';
+------+------------+
| code | used_by_id |
+------+------------+
| foo | 1 |
+------+------------+
1 row in set (0.00 sec)
==========================================================
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.48-debug Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE `GiftCodes` (
-> `code` varchar(32) collate utf8_bin NOT NULL default '',
-> `used_by_id` bigint(10) unsigned NOT NULL default '0',
-> PRIMARY KEY (`code`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Query OK, 0 rows affected (0.63 sec)
mysql>
mysql> insert into GiftCodes values ('foo',7);
Query OK, 1 row affected (0.01 sec)
mysql> select * from GiftCodes where code='foo';
+------+------------+
| code | used_by_id |
+------+------------+
| foo | 7 |
+------+------------+
1 row in set (0.02 sec)
mysql> update GiftCodes set used_by_id='1' where code='foo';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from GiftCodes where code='foo';
+------+------------+
| code | used_by_id |
+------+------------+
| foo | 1 |
+------+------------+
1 row in set (0.00 sec)
[19 Aug 2007 15:52]
Heikki Tuuri
Could this be the same as: http://bugs.mysql.com/bug.php?id=28878 , i.e., a padding bug in MySQL?
[29 Aug 2007 15:59]
Heikki Tuuri
Yes, it is most probably this commit to 4.1 that broke the (yet unpublished) 4.1.23: http://lists.mysql.com/commits/25686 The code was fixed in 5.0: http://bugs.mysql.com/bug.php?id=28878 but apparently it is not fixed in 4.1. I am marking this as a duplicate and reopening 28878.
