Commit 880c9b2a authored by unknown's avatar unknown
Browse files

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.
parent 695bcb9e
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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
+10 −0
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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: