Loading mysql-test/r/create.result +11 −0 Original line number Diff line number Diff line Loading @@ -621,3 +621,14 @@ create table if not exists t1 (a int); Warnings: Note 1050 Table 't1' already exists drop table t1; create table t1 ( a varchar(112) charset utf8 collate utf8_bin not null, primary key (a) ) select 'test' as a ; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(112) character set utf8 collate utf8_bin NOT NULL default '', PRIMARY KEY (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; mysql-test/t/create.test +8 −0 Original line number Diff line number Diff line Loading @@ -526,4 +526,12 @@ create table t1 (a int); create table if not exists t1 (a int); drop table t1; # BUG#14139 create table t1 ( a varchar(112) charset utf8 collate utf8_bin not null, primary key (a) ) select 'test' as a ; show create table t1; drop table t1; # End of 4.1 tests sql/field.cc +12 −0 Original line number Diff line number Diff line Loading @@ -6511,8 +6511,20 @@ bool Field_num::eq_def(Field *field) ** Handling of field and create_field *****************************************************************************/ /* Convert create_field::length from number of characters to number of bytes SYNOPSIS create_field::create_length_to_internal_length() DESCRIPTION Convert create_field::length from number of characters to number of bytes, save original value in chars_length. */ void create_field::create_length_to_internal_length(void) { chars_length= length; switch (sql_type) { case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: Loading sql/field.h +8 −0 Original line number Diff line number Diff line Loading @@ -1180,7 +1180,15 @@ class create_field :public Sql_alloc { LEX_STRING comment; // Comment for field Item *def; // Default value enum enum_field_types sql_type; /* At various stages in execution this can be length of field in bytes or max number of characters. */ uint32 length; /* The value of 'length' before a call to create_length_to_internal_length */ uint32 chars_length; uint decimals,flags,pack_length; Field::utype unireg_check; TYPELIB *interval; // Which interval to use Loading sql/sql_table.cc +2 −2 Original line number Diff line number Diff line Loading @@ -643,7 +643,7 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->charset= (dup_field->charset ? dup_field->charset : create_info->default_table_charset); sql_field->length= dup_field->length; sql_field->length= dup_field->chars_length; sql_field->pack_length= dup_field->pack_length; sql_field->create_length_to_internal_length(); sql_field->decimals= dup_field->decimals; Loading Loading
mysql-test/r/create.result +11 −0 Original line number Diff line number Diff line Loading @@ -621,3 +621,14 @@ create table if not exists t1 (a int); Warnings: Note 1050 Table 't1' already exists drop table t1; create table t1 ( a varchar(112) charset utf8 collate utf8_bin not null, primary key (a) ) select 'test' as a ; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(112) character set utf8 collate utf8_bin NOT NULL default '', PRIMARY KEY (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1;
mysql-test/t/create.test +8 −0 Original line number Diff line number Diff line Loading @@ -526,4 +526,12 @@ create table t1 (a int); create table if not exists t1 (a int); drop table t1; # BUG#14139 create table t1 ( a varchar(112) charset utf8 collate utf8_bin not null, primary key (a) ) select 'test' as a ; show create table t1; drop table t1; # End of 4.1 tests
sql/field.cc +12 −0 Original line number Diff line number Diff line Loading @@ -6511,8 +6511,20 @@ bool Field_num::eq_def(Field *field) ** Handling of field and create_field *****************************************************************************/ /* Convert create_field::length from number of characters to number of bytes SYNOPSIS create_field::create_length_to_internal_length() DESCRIPTION Convert create_field::length from number of characters to number of bytes, save original value in chars_length. */ void create_field::create_length_to_internal_length(void) { chars_length= length; switch (sql_type) { case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: Loading
sql/field.h +8 −0 Original line number Diff line number Diff line Loading @@ -1180,7 +1180,15 @@ class create_field :public Sql_alloc { LEX_STRING comment; // Comment for field Item *def; // Default value enum enum_field_types sql_type; /* At various stages in execution this can be length of field in bytes or max number of characters. */ uint32 length; /* The value of 'length' before a call to create_length_to_internal_length */ uint32 chars_length; uint decimals,flags,pack_length; Field::utype unireg_check; TYPELIB *interval; // Which interval to use Loading
sql/sql_table.cc +2 −2 Original line number Diff line number Diff line Loading @@ -643,7 +643,7 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->charset= (dup_field->charset ? dup_field->charset : create_info->default_table_charset); sql_field->length= dup_field->length; sql_field->length= dup_field->chars_length; sql_field->pack_length= dup_field->pack_length; sql_field->create_length_to_internal_length(); sql_field->decimals= dup_field->decimals; Loading