Loading mysql-test/r/func_concat.result +7 −0 Original line number Diff line number Diff line Loading @@ -68,3 +68,10 @@ select 'a' union select concat('a', -0.0000); a a a0.0000 create table t1(f1 varchar(6)) charset=utf8; insert into t1 values ("123456"); select concat(f1, 2) a from t1 union select 'x' a from t1; a 1234562 x drop table t1; mysql-test/t/func_concat.test +8 −0 Original line number Diff line number Diff line Loading @@ -53,3 +53,11 @@ select 'a' union select concat('a', -0.0); select 'a' union select concat('a', -0.0000); # End of 4.1 tests # # Bug#15962: CONCAT() in UNION may lead to a data trucation. # create table t1(f1 varchar(6)) charset=utf8; insert into t1 values ("123456"); select concat(f1, 2) a from t1 union select 'x' a from t1; drop table t1; sql/item_strfunc.cc +8 −1 Original line number Diff line number Diff line Loading @@ -389,7 +389,14 @@ void Item_func_concat::fix_length_and_dec() return; for (uint i=0 ; i < arg_count ; i++) { if (args[i]->collation.collation->mbmaxlen != collation.collation->mbmaxlen) max_result_length+= (args[i]->max_length / args[i]->collation.collation->mbmaxlen) * collation.collation->mbmaxlen; else max_result_length+= args[i]->max_length; } if (max_result_length >= MAX_BLOB_WIDTH) { Loading Loading
mysql-test/r/func_concat.result +7 −0 Original line number Diff line number Diff line Loading @@ -68,3 +68,10 @@ select 'a' union select concat('a', -0.0000); a a a0.0000 create table t1(f1 varchar(6)) charset=utf8; insert into t1 values ("123456"); select concat(f1, 2) a from t1 union select 'x' a from t1; a 1234562 x drop table t1;
mysql-test/t/func_concat.test +8 −0 Original line number Diff line number Diff line Loading @@ -53,3 +53,11 @@ select 'a' union select concat('a', -0.0); select 'a' union select concat('a', -0.0000); # End of 4.1 tests # # Bug#15962: CONCAT() in UNION may lead to a data trucation. # create table t1(f1 varchar(6)) charset=utf8; insert into t1 values ("123456"); select concat(f1, 2) a from t1 union select 'x' a from t1; drop table t1;
sql/item_strfunc.cc +8 −1 Original line number Diff line number Diff line Loading @@ -389,7 +389,14 @@ void Item_func_concat::fix_length_and_dec() return; for (uint i=0 ; i < arg_count ; i++) { if (args[i]->collation.collation->mbmaxlen != collation.collation->mbmaxlen) max_result_length+= (args[i]->max_length / args[i]->collation.collation->mbmaxlen) * collation.collation->mbmaxlen; else max_result_length+= args[i]->max_length; } if (max_result_length >= MAX_BLOB_WIDTH) { Loading