Commit e0b4e228 authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into  mysql.com:/opt/local/work/mysql-5.0-runtime

parents ef1316fa 9519987c
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -900,6 +900,27 @@ execute stmt using @like;
deallocate prepare stmt;
drop table t1;

#
# Bug#13134 "Length of VARCHAR() utf8 column is increasing when table is
# recreated with PS/SP"
#

prepare stmt from 'create table t1 (a varchar(10) character set utf8)';
execute stmt;
--disable_warnings
insert into t1 (a) values (repeat('a', 20));
--enable_warnings
select length(a) from t1;
drop table t1;
execute stmt;
--disable_warnings
insert into t1 (a) values (repeat('a', 20));
--enable_warnings
# Check that the data is truncated to the same length
select length(a) from t1;
drop table t1;
deallocate prepare stmt;

# End of 4.1 tests

#
+2 −3
Original line number Diff line number Diff line
@@ -8213,13 +8213,11 @@ void Field_bit_as_char::sql_type(String &res) const
    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.
    Convert create_field::length from number of characters to number of bytes.
*/

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:
@@ -8937,6 +8935,7 @@ create_field::create_field(Field *old_field,Field *orig_field)
  else
    interval=0;
  def=0;
  char_length= length;

  if (!(flags & (NO_DEFAULT_VALUE_FLAG | BLOB_FLAG)) &&
      old_field->ptr && orig_field &&
+3 −2
Original line number Diff line number Diff line
@@ -1386,9 +1386,10 @@ class create_field :public Sql_alloc
  */
  ulong length;
  /*
    The value of 'length' before a call to create_length_to_internal_length
    The value of `length' as set by parser: is the number of characters
    for most of the types, or of bytes for BLOBs or numeric types.
  */
  uint32 chars_length;
  uint32 char_length;
  uint  decimals, flags, pack_length, key_length;
  Field::utype unireg_check;
  TYPELIB *interval;			// Which interval to use
+1 −2
Original line number Diff line number Diff line
@@ -3594,7 +3594,6 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
{
  Field_iterator_table_ref it_1, it_2;
  Natural_join_column *nj_col_1, *nj_col_2;
  const char *field_name_1;
  Query_arena *arena, backup;
  bool add_columns= TRUE;
  bool result= TRUE;
@@ -3627,6 +3626,7 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
  {
    bool is_created_1;
    bool found= FALSE;
    const char *field_name_1;
    if (!(nj_col_1= it_1.get_or_create_column_ref(&is_created_1)))
      goto err;
    field_name_1= nj_col_1->name();
@@ -3823,7 +3823,6 @@ store_natural_using_join_columns(THD *thd, TABLE_LIST *natural_using_join,
{
  Field_iterator_table_ref it_1, it_2;
  Natural_join_column *nj_col_1, *nj_col_2;
  bool is_created;
  Query_arena *arena, backup;
  bool result= TRUE;
  List<Natural_join_column> *non_join_columns;
+1 −0
Original line number Diff line number Diff line
@@ -5791,6 +5791,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
                      interval_list, cs, uint_geom_type))
    DBUG_RETURN(1);

  new_field->char_length= new_field->length;
  lex->create_list.push_back(new_field);
  lex->last_field=new_field;
  DBUG_RETURN(0);
Loading