Loading client/mysql.cc +7 −2 Original line number Diff line number Diff line Loading @@ -2154,7 +2154,12 @@ print_table_data(MYSQL_RES *result) (void) tee_fputs("|", PAGER); for (uint off=0; (field = mysql_fetch_field(result)) ; off++) { tee_fprintf(PAGER, " %-*s|",(int) min(field->max_length, uint name_length= (uint) strlen(field->name); uint numcells= charset_info->cset->numcells(charset_info, field->name, field->name + name_length); uint display_length= field->max_length + name_length - numcells; tee_fprintf(PAGER, " %-*s|",(int) min(display_length, MAX_COLUMN_LENGTH), field->name); num_flag[off]= IS_NUM(field->type); Loading mysql-test/r/ctype_utf8.result +31 −0 Original line number Diff line number Diff line Loading @@ -924,6 +924,37 @@ NULL select ifnull(NULL, _utf8'string'); ifnull(NULL, _utf8'string') string set names utf8; create table t1 (s1 char(5) character set utf8 collate utf8_lithuanian_ci); insert into t1 values ('I'),('K'),('Y'); select * from t1 where s1 < 'K' and s1 = 'Y'; s1 I Y select * from t1 where 'K' > s1 and s1 = 'Y'; s1 I Y drop table t1; create table t1 (s1 char(5) character set utf8 collate utf8_czech_ci); insert into t1 values ('c'),('d'),('h'),('ch'),('CH'),('cH'),('Ch'),('i'); select * from t1 where s1 > 'd' and s1 = 'CH'; s1 ch CH Ch select * from t1 where 'd' < s1 and s1 = 'CH'; s1 ch CH Ch select * from t1 where s1 = 'cH' and s1 <> 'ch'; s1 cH select * from t1 where 'cH' = s1 and s1 <> 'ch'; s1 cH drop table t1; create table t1 (a varchar(255)) default character set utf8; insert into t1 values (1.0); drop table t1; Loading mysql-test/t/ctype_utf8.test +18 −0 Original line number Diff line number Diff line Loading @@ -727,6 +727,24 @@ drop table t1; select repeat(_utf8'+',3) as h union select NULL; select ifnull(NULL, _utf8'string'); # # Bug#9509 Optimizer: wrong result after AND with comparisons # set names utf8; create table t1 (s1 char(5) character set utf8 collate utf8_lithuanian_ci); insert into t1 values ('I'),('K'),('Y'); select * from t1 where s1 < 'K' and s1 = 'Y'; select * from t1 where 'K' > s1 and s1 = 'Y'; drop table t1; create table t1 (s1 char(5) character set utf8 collate utf8_czech_ci); insert into t1 values ('c'),('d'),('h'),('ch'),('CH'),('cH'),('Ch'),('i'); select * from t1 where s1 > 'd' and s1 = 'CH'; select * from t1 where 'd' < s1 and s1 = 'CH'; select * from t1 where s1 = 'cH' and s1 <> 'ch'; select * from t1 where 'cH' = s1 and s1 <> 'ch'; drop table t1; # # Bug#10714: Inserting double value into utf8 column crashes server # Loading sql/sql_select.cc +4 −0 Original line number Diff line number Diff line Loading @@ -4549,6 +4549,8 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list, left_item->collation.collation == value->collation.collation)) { Item *tmp=value->new_item(); tmp->collation.set(right_item->collation); if (tmp) { thd->change_item_tree(args + 1, tmp); Loading @@ -4570,6 +4572,8 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list, right_item->collation.collation == value->collation.collation)) { Item *tmp=value->new_item(); tmp->collation.set(left_item->collation); if (tmp) { thd->change_item_tree(args, tmp); Loading Loading
client/mysql.cc +7 −2 Original line number Diff line number Diff line Loading @@ -2154,7 +2154,12 @@ print_table_data(MYSQL_RES *result) (void) tee_fputs("|", PAGER); for (uint off=0; (field = mysql_fetch_field(result)) ; off++) { tee_fprintf(PAGER, " %-*s|",(int) min(field->max_length, uint name_length= (uint) strlen(field->name); uint numcells= charset_info->cset->numcells(charset_info, field->name, field->name + name_length); uint display_length= field->max_length + name_length - numcells; tee_fprintf(PAGER, " %-*s|",(int) min(display_length, MAX_COLUMN_LENGTH), field->name); num_flag[off]= IS_NUM(field->type); Loading
mysql-test/r/ctype_utf8.result +31 −0 Original line number Diff line number Diff line Loading @@ -924,6 +924,37 @@ NULL select ifnull(NULL, _utf8'string'); ifnull(NULL, _utf8'string') string set names utf8; create table t1 (s1 char(5) character set utf8 collate utf8_lithuanian_ci); insert into t1 values ('I'),('K'),('Y'); select * from t1 where s1 < 'K' and s1 = 'Y'; s1 I Y select * from t1 where 'K' > s1 and s1 = 'Y'; s1 I Y drop table t1; create table t1 (s1 char(5) character set utf8 collate utf8_czech_ci); insert into t1 values ('c'),('d'),('h'),('ch'),('CH'),('cH'),('Ch'),('i'); select * from t1 where s1 > 'd' and s1 = 'CH'; s1 ch CH Ch select * from t1 where 'd' < s1 and s1 = 'CH'; s1 ch CH Ch select * from t1 where s1 = 'cH' and s1 <> 'ch'; s1 cH select * from t1 where 'cH' = s1 and s1 <> 'ch'; s1 cH drop table t1; create table t1 (a varchar(255)) default character set utf8; insert into t1 values (1.0); drop table t1; Loading
mysql-test/t/ctype_utf8.test +18 −0 Original line number Diff line number Diff line Loading @@ -727,6 +727,24 @@ drop table t1; select repeat(_utf8'+',3) as h union select NULL; select ifnull(NULL, _utf8'string'); # # Bug#9509 Optimizer: wrong result after AND with comparisons # set names utf8; create table t1 (s1 char(5) character set utf8 collate utf8_lithuanian_ci); insert into t1 values ('I'),('K'),('Y'); select * from t1 where s1 < 'K' and s1 = 'Y'; select * from t1 where 'K' > s1 and s1 = 'Y'; drop table t1; create table t1 (s1 char(5) character set utf8 collate utf8_czech_ci); insert into t1 values ('c'),('d'),('h'),('ch'),('CH'),('cH'),('Ch'),('i'); select * from t1 where s1 > 'd' and s1 = 'CH'; select * from t1 where 'd' < s1 and s1 = 'CH'; select * from t1 where s1 = 'cH' and s1 <> 'ch'; select * from t1 where 'cH' = s1 and s1 <> 'ch'; drop table t1; # # Bug#10714: Inserting double value into utf8 column crashes server # Loading
sql/sql_select.cc +4 −0 Original line number Diff line number Diff line Loading @@ -4549,6 +4549,8 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list, left_item->collation.collation == value->collation.collation)) { Item *tmp=value->new_item(); tmp->collation.set(right_item->collation); if (tmp) { thd->change_item_tree(args + 1, tmp); Loading @@ -4570,6 +4572,8 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list, right_item->collation.collation == value->collation.collation)) { Item *tmp=value->new_item(); tmp->collation.set(left_item->collation); if (tmp) { thd->change_item_tree(args, tmp); Loading