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.


mysql-test/r/ctype_gbk.result:
  Adding test case
mysql-test/t/ctype_gbk.test:
  Adding test case
sql/field.cc:
  Fixing "internal length to create length" formula.
This commit is contained in:
unknown 2006-09-29 16:24:11 +05:00
parent 695bcb9e7b
commit 880c9b2a8b
3 changed files with 21 additions and 1 deletions

View file

@ -168,3 +168,13 @@ DROP TABLE t1;
select hex(convert(_gbk 0xA14041 using ucs2));
hex(convert(_gbk 0xA14041 using ucs2))
003F0041
create table t1 (c1 text not null, c2 text not null) character set gbk;
alter table t1 change c1 c1 mediumtext character set gbk not null;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` mediumtext NOT NULL,
`c2` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
drop table t1;
End of 5.0 tests

View file

@ -42,3 +42,13 @@ DROP TABLE t1;
select hex(convert(_gbk 0xA14041 using ucs2));
# End of 4.1 tests
#
# Bug#21620 ALTER TABLE affects other columns
#
create table t1 (c1 text not null, c2 text not null) character set gbk;
alter table t1 change c1 c1 mediumtext character set gbk not null;
show create table t1;
drop table t1;
--echo End of 5.0 tests

View file

@ -8877,7 +8877,7 @@ create_field::create_field(Field *old_field,Field *orig_field)
case 3: sql_type= FIELD_TYPE_MEDIUM_BLOB; break;
default: sql_type= FIELD_TYPE_LONG_BLOB; break;
}
length=(length+charset->mbmaxlen-1) / charset->mbmaxlen;
length/= charset->mbmaxlen;
key_length/= charset->mbmaxlen;
break;
case MYSQL_TYPE_STRING: