diff --git a/mysql-test/r/errors.result b/mysql-test/r/errors.result index d0011c8deb6..9a91c088aca 100644 --- a/mysql-test/r/errors.result +++ b/mysql-test/r/errors.result @@ -23,3 +23,8 @@ ERROR 42S22: Unknown column 't1.b' in 'order clause' select count(*),b from t1; ERROR 42S22: Unknown column 'b' in 'field list' drop table t1; +create table t1 (a int(256)); +ERROR 42000: Display width out of range for column 'a' (max = 255) +set sql_mode='traditional'; +create table t1 (a varchar(66000)); +ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead diff --git a/mysql-test/r/type_bit.result b/mysql-test/r/type_bit.result index 4aa8587d6e1..035af0d82ac 100644 --- a/mysql-test/r/type_bit.result +++ b/mysql-test/r/type_bit.result @@ -36,7 +36,7 @@ select 0 + b'1000000000000001'; 32769 drop table if exists t1; create table t1 (a bit(65)); -ERROR 42000: Column length too big for column 'a' (max = 64); use BLOB or TEXT instead +ERROR 42000: Display width out of range for column 'a' (max = 64) create table t1 (a bit(0)); show create table t1; Table Create Table diff --git a/mysql-test/r/type_bit_innodb.result b/mysql-test/r/type_bit_innodb.result index f3e9dad3baa..8d9c9756a33 100644 --- a/mysql-test/r/type_bit_innodb.result +++ b/mysql-test/r/type_bit_innodb.result @@ -36,7 +36,7 @@ select 0 + b'1000000000000001'; 32769 drop table if exists t1; create table t1 (a bit(65)) engine=innodb; -ERROR 42000: Column length too big for column 'a' (max = 64); use BLOB or TEXT instead +ERROR 42000: Display width out of range for column 'a' (max = 64) create table t1 (a bit(0)) engine=innodb; show create table t1; Table Create Table diff --git a/mysql-test/t/errors.test b/mysql-test/t/errors.test index 93668ffdd3d..f7913ab402c 100644 --- a/mysql-test/t/errors.test +++ b/mysql-test/t/errors.test @@ -31,3 +31,14 @@ select count(*),b from t1; drop table t1; # End of 4.1 tests + +# +# Bug #6080: Error message for a field with a display width that is too long +# +--error 1438 +create table t1 (a int(256)); +set sql_mode='traditional'; +--error 1074 +create table t1 (a varchar(66000)); + +# End of 5.0 tests diff --git a/mysql-test/t/type_bit_innodb.test b/mysql-test/t/type_bit_innodb.test index 693fc169717..090b7aef218 100644 --- a/mysql-test/t/type_bit_innodb.test +++ b/mysql-test/t/type_bit_innodb.test @@ -20,7 +20,7 @@ select 0 + b'1000000000000001'; drop table if exists t1; --enable_warnings ---error 1074 +--error 1438 create table t1 (a bit(65)) engine=innodb; create table t1 (a bit(0)) engine=innodb; diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 5dd5cd9c775..5462aa94516 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5388,3 +5388,5 @@ ER_STACK_OVERRUN_NEED_MORE eng "Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack." ER_TOO_LONG_BODY 42000 S1009 eng "Routine body for '%-.100s' is too long" +ER_TOO_BIG_DISPLAYWIDTH 42000 S1009 + eng "Display width out of range for column '%-.64s' (max = %d)" diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 677b3a98174..0794de6c191 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5819,7 +5819,7 @@ new_create_field(THD *thd, char *field_name, enum_field_types type, new_field->length= 1; if (new_field->length > MAX_BIT_FIELD_LENGTH) { - my_error(ER_TOO_BIG_FIELDLENGTH, MYF(0), field_name, + my_error(ER_TOO_BIG_DISPLAYWIDTH, MYF(0), field_name, MAX_BIT_FIELD_LENGTH); DBUG_RETURN(NULL); } @@ -5838,7 +5838,10 @@ new_create_field(THD *thd, char *field_name, enum_field_types type, type != MYSQL_TYPE_STRING && type != MYSQL_TYPE_VARCHAR && type != FIELD_TYPE_GEOMETRY))) { - my_error(ER_TOO_BIG_FIELDLENGTH, MYF(0), + my_error((type == MYSQL_TYPE_VAR_STRING || type == MYSQL_TYPE_VARCHAR || + type == MYSQL_TYPE_STRING) ? ER_TOO_BIG_FIELDLENGTH : + ER_TOO_BIG_DISPLAYWIDTH, + MYF(0), field_name, max_field_charlength); /* purecov: inspected */ DBUG_RETURN(NULL); }