Bug #21620 | ALTER TABLE affects other columns | ||
---|---|---|---|
Submitted: | 14 Aug 2006 11:53 | Modified: | 5 Oct 2006 17:09 |
Reporter: | Marc Delisle | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Charsets | Severity: | S2 (Serious) |
Version: | 5.0.24/5.0/5.1BK | OS: | Linux (Linux) |
Assigned to: | Alexander Barkov | CPU Architecture: | Any |
[14 Aug 2006 11:53]
Marc Delisle
[14 Aug 2006 12:38]
MySQL Verification Team
Thank you for the bug report. Verified as described: miguel@hegel:~/dbs/4.1> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.22-debug Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE `calendar` ( -> `id` int(10) unsigned NOT NULL auto_increment, -> `creator` int(10) unsigned NOT NULL, -> `start_time` datetime NOT NULL, -> `end_date` date NOT NULL, -> `circle` char(1) NOT NULL, -> `alert_num` int(10) unsigned NOT NULL, -> `alert_unit` varchar(10) NOT NULL, -> `alert_sms` char(1) NOT NULL, -> `title` tinytext NOT NULL, -> `content` text NOT NULL, -> `members` text NOT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM DEFAULT CHARSET=gbk ; Query OK, 0 rows affected (0.03 sec) mysql> ALTER TABLE `calendar` CHANGE `content` `content` MEDIUMTEXT CHARACTER -> SET gbk COLLATE gbk_chinese_ci NOT NULL; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table calendar\G *************************** 1. row *************************** Table: calendar Create Table: CREATE TABLE `calendar` ( `id` int(10) unsigned NOT NULL auto_increment, `creator` int(10) unsigned NOT NULL default '0', `start_time` datetime NOT NULL default '0000-00-00 00:00:00', `end_date` date NOT NULL default '0000-00-00', `circle` char(1) NOT NULL default '', `alert_num` int(10) unsigned NOT NULL default '0', `alert_unit` varchar(10) NOT NULL default '', `alert_sms` char(1) NOT NULL default '', `title` tinytext NOT NULL, `content` mediumtext NOT NULL, `members` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk 1 row in set (0.00 sec) ------------------------------------------------------------ Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 5.0.25-debug Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE `calendar` ( -> `id` int(10) unsigned NOT NULL auto_increment, -> `creator` int(10) unsigned NOT NULL, -> `start_time` datetime NOT NULL, -> `end_date` date NOT NULL, -> `circle` char(1) NOT NULL, -> `alert_num` int(10) unsigned NOT NULL, -> `alert_unit` varchar(10) NOT NULL, -> `alert_sms` char(1) NOT NULL, -> `title` tinytext NOT NULL, -> `content` text NOT NULL, -> `members` text NOT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM DEFAULT CHARSET=gbk ; Query OK, 0 rows affected (0.01 sec) mysql> ALTER TABLE `calendar` CHANGE `content` `content` MEDIUMTEXT CHARACTER -> SET gbk COLLATE gbk_chinese_ci NOT NULL; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table calendar\G *************************** 1. row *************************** Table: calendar Create Table: CREATE TABLE `calendar` ( `id` int(10) unsigned NOT NULL auto_increment, `creator` int(10) unsigned NOT NULL, `start_time` datetime NOT NULL, `end_date` date NOT NULL, `circle` char(1) NOT NULL, `alert_num` int(10) unsigned NOT NULL, `alert_unit` varchar(10) NOT NULL, `alert_sms` char(1) NOT NULL, `title` tinytext NOT NULL, `content` mediumtext NOT NULL, `members` mediumtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk 1 row in set (0.01 sec) mysql> ------------------------------------------------------------ Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.1.12-beta-debug Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE `calendar` ( -> `id` int(10) unsigned NOT NULL auto_increment, -> `creator` int(10) unsigned NOT NULL, -> `start_time` datetime NOT NULL, -> `end_date` date NOT NULL, -> `circle` char(1) NOT NULL, -> `alert_num` int(10) unsigned NOT NULL, -> `alert_unit` varchar(10) NOT NULL, -> `alert_sms` char(1) NOT NULL, -> `title` tinytext NOT NULL, -> `content` text NOT NULL, -> `members` text NOT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM DEFAULT CHARSET=gbk ; Query OK, 0 rows affected (0.02 sec) mysql> ALTER TABLE `calendar` CHANGE `content` `content` MEDIUMTEXT CHARACTER -> SET gbk COLLATE gbk_chinese_ci NOT NULL; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table calendar\G *************************** 1. row *************************** Table: calendar Create Table: CREATE TABLE `calendar` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `creator` int(10) unsigned NOT NULL, `start_time` datetime NOT NULL, `end_date` date NOT NULL, `circle` char(1) NOT NULL, `alert_num` int(10) unsigned NOT NULL, `alert_unit` varchar(10) NOT NULL, `alert_sms` char(1) NOT NULL, `title` tinytext NOT NULL, `content` mediumtext NOT NULL, `members` mediumtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk 1 row in set (0.00 sec) mysql>
[26 Aug 2006 18:38]
Calvin Sun
This is not storage engine specific issue. I can reproduce the problem with InnoDB. Also, if the default charset is set as latin1, the problem disappears.
[11 Sep 2006 12:01]
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/11688 ChangeSet@1.2235, 2006-09-11 16:51:03+05:00, bar@mysql.com +3 -0 Bug#21620 ALTER TABLE affects other columns Problem: for character sets having mbmaxlen==2, any ALTER TABLE changed TEXT column type to MEDIUMTEXT, due to wrong "internal length to create length" formula. Fix: removing rounding code introduced in early 4.1 time, which is not correct anymore.
[29 Sep 2006 11: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/commits/12832 ChangeSet@1.2283, 2006-09-29 16:24:11+05:00, bar@mysql.com +3 -0 Bug#21620 ALTER TABLE affects other columns Problem: for character sets having mbmaxlen==2, any ALTER TABLE changed TEXT column type to MEDIUMTEXT, due to wrong "internal length to create length" formula. Fix: removing rounding code introduced in early 4.1 time, which is not correct anymore.
[3 Oct 2006 20:01]
Chad MILLER
Available in 5.0.26.
[3 Oct 2006 20:15]
Chad MILLER
Available in 5.1.12-beta.
[5 Oct 2006 17:09]
Paul DuBois
Noted in 5.0.26, 5.1.12 changelogs. For character sets having a mbmaxlen value of 2, any ALTER TABLE statement changed TEXT columns to MEDIUMTEXT.
[10 Oct 2006 14:49]
Minfeng Zhang
The Problem still exist in MySQL 5.0.26 reproduce: Create a new database using Collation "gbk_chinese_ci", then run SQL: CREATE TABLE `mails` ( `id` int(10) unsigned NOT NULL auto_increment, `creator` int(10) unsigned NOT NULL, `start_time` datetime NOT NULL, `temp` char(1) NOT NULL, `backup` char(1) NOT NULL, `title` tinytext NOT NULL, `content` text NOT NULL, `members` text NOT NULL, `members_left` text NOT NULL, `members_backup` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk ; alert any "text" fields will cause other "text" fields turn to "mediumtext"
[10 Oct 2006 19:04]
MySQL Verification Team
Please see http://bugs.mysql.com/bug.php?id=23141 regarding version fixed.