mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Merge mysql.com:/opt/local/work/mysql-4.1-13134
into mysql.com:/opt/local/work/mysql-5.0-runtime mysql-test/t/heap.test: Auto merged mysql-test/r/heap.result: Manual merge (use local) mysql-test/r/ps.result: Manual merge (use local) mysql-test/t/ps.test: Manual merge. sql/field.cc: Manual merge. sql/field.h: Manual merge. sql/sql_parse.cc: Manual merge. sql/sql_table.cc: Manual merge.
This commit is contained in:
commit
9519987cf0
5 changed files with 34 additions and 6 deletions
|
@ -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
|
||||
|
||||
#
|
||||
|
|
|
@ -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 &&
|
||||
|
|
|
@ -1386,9 +1386,10 @@ public:
|
|||
*/
|
||||
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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -688,6 +688,12 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||
{
|
||||
CHARSET_INFO *save_cs;
|
||||
|
||||
/*
|
||||
Initialize length from its original value (number of characters),
|
||||
which was set in the parser. This is necessary if we're
|
||||
executing a prepared statement for the second time.
|
||||
*/
|
||||
sql_field->length= sql_field->char_length;
|
||||
if (!sql_field->charset)
|
||||
sql_field->charset= create_info->default_table_charset;
|
||||
/*
|
||||
|
@ -872,7 +878,7 @@ static 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->chars_length;
|
||||
sql_field->length= dup_field->char_length;
|
||||
sql_field->pack_length= dup_field->pack_length;
|
||||
sql_field->key_length= dup_field->key_length;
|
||||
sql_field->create_length_to_internal_length();
|
||||
|
|
Loading…
Add table
Reference in a new issue