Below is the list of changes that have just been committed into a local
5.0 repository of cmiller. When cmiller does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-08-10 18:14:54-04:00, cmiller@stripped +8 -0
Bug#15776: 32-bit signed int used for length of blob
Contributed patch from Martin Friebe, CLA from 2007-02-24.
The parser lacked support for field sizes after signed long,
when it should extend to 2**32-1.
Now, we correct that limitation, and also make the error handling
consistent for casts.
mysql-test/r/type_blob.result@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +93 -0
Verify that blobs may be created with the size that is already
documented.
mysql-test/t/type_blob.test@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +89 -0
Verify that blobs may be created with the size that is already
documented.
sql/field.cc@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +14 -2
atoi() insufficient to gauge the length of some fields. Change
it to strtoul().
Add a new status variable to track whether a field is too long.
sql/item_create.cc@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +9 -2
atoi() insufficient to gauge the length of some fields. Change
it to strtoul().
If a casted length is too long, raise an error.
sql/item_timefunc.h@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +3 -2
Make casts accept lengths greater than mere int -- longlong.
sql/share/errmsg.txt@stripped, 2007-08-10 18:14:51-04:00, cmiller@stripped +24 -24
Change ER_TOO_BIG_FIELDLENGTH so that it can accept sizes larger
than 2**15 -- instead, 2**32.
sql/sql_yacc.yy@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +5 -2
Make lengths take, in addition to NUM, LONG_NUM, ULONGLONG_NUM,
and DECIMAL_NUM.
sql/unireg.h@stripped, 2007-08-10 18:14:51-04:00, cmiller@stripped +1 -0
Define new constant.
diff -Nrup a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result
--- a/mysql-test/r/type_blob.result 2007-03-01 11:59:52 -05:00
+++ b/mysql-test/r/type_blob.result 2007-08-10 18:14:50 -04:00
@@ -807,4 +807,97 @@ set @@sql_mode='TRADITIONAL';
create table t1 (a text default '');
ERROR 42000: BLOB/TEXT column 'a' can't have a default value
set @@sql_mode='';
+create table b15776 (data blob(2147483647));
+drop table b15776;
+create table b15776 (data blob(-1));
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1))' at line 1
+create table b15776 (data blob(2147483648));
+drop table b15776;
+create table b15776 (data blob(4294967294));
+drop table b15776;
+create table b15776 (data blob(4294967295));
+create table b15776 (data blob(4294967296));
+ERROR 42000: Column length too big for column 'data' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a blob(2147483647), b blob(2147483648), c blob(4294967295), a1 text(2147483647), b1 text(2147483648), c1 text(4294967295) );
+show columns from t1;
+Field Type Null Key Default Extra
+a longblob YES NULL
+b longblob YES NULL
+c longblob YES NULL
+a1 longtext YES NULL
+b1 longtext YES NULL
+c1 longtext YES NULL
+drop table t1;
+CREATE TABLE t1 (a blob(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a text(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a blob(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a text(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a int(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a char(4294967296));
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '4294967296))' at line 1
+CREATE TABLE t1 (a year(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a timestamp(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a int(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '99999999999999999999999999999999999999999999999999999999999999999999999999999999' at line 1
+CREATE TABLE t1 (a year(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a timestamp(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 select cast(null as char(4294967295));
+show columns from t1;
+Field Type Null Key Default Extra
+cast(null as char(4294967295)) longtext YES NULL
+drop table t1;
+CREATE TABLE t1 select cast(null as nchar(4294967295));
+show columns from t1;
+Field Type Null Key Default Extra
+cast(null as nchar(4294967295)) longtext YES NULL
+drop table t1;
+CREATE TABLE t1 select cast(null as binary(4294967295));
+show columns from t1;
+Field Type Null Key Default Extra
+cast(null as binary(4294967295)) longblob YES NULL
+drop table t1;
+explain select cast(1 as char(4294967295));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+explain select cast(1 as nchar(4294967295));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+explain select cast(1 as binary(4294967295));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+explain select cast(1 as char(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as nchar(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as binary(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, char(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, nchar(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, binary(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
End of 5.0 tests
diff -Nrup a/mysql-test/t/type_blob.test b/mysql-test/t/type_blob.test
--- a/mysql-test/t/type_blob.test 2007-02-14 08:44:31 -05:00
+++ b/mysql-test/t/type_blob.test 2007-08-10 18:14:50 -04:00
@@ -436,4 +436,93 @@ set @@sql_mode='TRADITIONAL';
create table t1 (a text default '');
set @@sql_mode='';
+#
+# Bug#15776: 32-bit signed int used for length of blob
+# """LONGBLOB: A BLOB column with a maximum length of 4,294,967,295 or 4GB."""
+#
+create table b15776 (data blob(2147483647));
+drop table b15776;
+--error ER_PARSE_ERROR
+create table b15776 (data blob(-1));
+create table b15776 (data blob(2147483648));
+drop table b15776;
+create table b15776 (data blob(4294967294));
+drop table b15776;
+create table b15776 (data blob(4294967295));
+--error ER_TOO_BIG_FIELDLENGTH
+create table b15776 (data blob(4294967296));
+
+CREATE TABLE t1 (a blob(2147483647), b blob(2147483648), c blob(4294967295), a1 text(2147483647), b1 text(2147483648), c1 text(4294967295) );
+show columns from t1;
+drop table t1;
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a blob(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a text(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a blob(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a text(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
+# Bug#15776: additional test, affecting other functions
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a int(4294967296));
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a char(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+# It's probably okay if this fails for other than 2**31 overflow.
+CREATE TABLE t1 (a year(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a timestamp(4294967296));
+
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a int(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a year(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a timestamp(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
+# do not select, too much memory needed
+CREATE TABLE t1 select cast(null as char(4294967295));
+show columns from t1;
+drop table t1;
+CREATE TABLE t1 select cast(null as nchar(4294967295));
+show columns from t1;
+drop table t1;
+CREATE TABLE t1 select cast(null as binary(4294967295));
+show columns from t1;
+drop table t1;
+
+explain select cast(1 as char(4294967295));
+explain select cast(1 as nchar(4294967295));
+explain select cast(1 as binary(4294967295));
+
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as char(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as nchar(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as binary(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, char(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, nchar(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, binary(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
--echo End of 5.0 tests
diff -Nrup a/sql/field.cc b/sql/field.cc
--- a/sql/field.cc 2007-07-25 18:28:50 -04:00
+++ b/sql/field.cc 2007-08-10 18:14:50 -04:00
@@ -8395,8 +8395,20 @@ bool create_field::init(THD *thd, char *
(fld_type_modifier & NOT_NULL_FLAG) && fld_type != FIELD_TYPE_TIMESTAMP)
flags|= NO_DEFAULT_VALUE_FLAG;
- if (fld_length && !(length= (uint) atoi(fld_length)))
- fld_length= 0; /* purecov: inspected */
+ if (fld_length != 0)
+ {
+ errno= 0;
+ length= strtoul(fld_length, NULL, 10);
+ if (errno != 0)
+ {
+ my_error(ER_TOO_BIG_FIELDLENGTH, MYF(0), fld_name, MAX_FIELD_BLOBLENGTH);
+ DBUG_RETURN(TRUE);
+ }
+
+ if (length == 0)
+ fld_length= 0; /* purecov: inspected */
+ }
+
sign_len= fld_type_modifier & UNSIGNED_FLAG ? 0 : 1;
switch (fld_type) {
diff -Nrup a/sql/item_create.cc b/sql/item_create.cc
--- a/sql/item_create.cc 2007-08-02 05:51:00 -04:00
+++ b/sql/item_create.cc 2007-08-10 18:14:50 -04:00
@@ -487,9 +487,16 @@ Item *create_func_cast(Item *a, Cast_tar
res= new Item_decimal_typecast(a, len, dec);
break;
case ITEM_CAST_CHAR:
- len= c_len ? atoi(c_len) : -1;
+ errno= 0;
+ longlong len= c_len ? strtoul(c_len, NULL, 10) : LL(-1);
+ if (errno != 0)
+ {
+ my_error(ER_TOO_BIG_FIELDLENGTH, MYF(0), "cast as char", MAX_FIELD_BLOBLENGTH);
+ return 0;
+ }
+
res= new Item_char_typecast(a, len, cs ? cs :
- current_thd->variables.collation_connection);
+ current_thd->variables.collation_connection);
break;
}
return res;
diff -Nrup a/sql/item_timefunc.h b/sql/item_timefunc.h
--- a/sql/item_timefunc.h 2007-05-16 04:44:40 -04:00
+++ b/sql/item_timefunc.h 2007-08-10 18:14:50 -04:00
@@ -755,12 +755,13 @@ public:
class Item_char_typecast :public Item_typecast
{
- int cast_length;
+ // cast_length supports up to 4294967295, but also -1
+ longlong cast_length;
CHARSET_INFO *cast_cs, *from_cs;
bool charset_conversion;
String tmp_value;
public:
- Item_char_typecast(Item *a, int length_arg, CHARSET_INFO *cs_arg)
+ Item_char_typecast(Item *a, longlong length_arg, CHARSET_INFO *cs_arg)
:Item_typecast(a), cast_length(length_arg), cast_cs(cs_arg) {}
enum Functype functype() const { return CHAR_TYPECAST_FUNC; }
bool eq(const Item *item, bool binary_cmp) const;
diff -Nrup a/sql/share/errmsg.txt b/sql/share/errmsg.txt
--- a/sql/share/errmsg.txt 2007-06-05 19:42:39 -04:00
+++ b/sql/share/errmsg.txt 2007-08-10 18:14:51 -04:00
@@ -1771,30 +1771,30 @@ ER_BLOB_USED_AS_KEY 42000 S1009
ER_TOO_BIG_FIELDLENGTH 42000 S1009
- nla "Te grote kolomlengte voor '%-.64s' (max = %d). Maak hiervoor gebruik van het type BLOB"
- eng "Column length too big for column '%-.64s' (max = %d); use BLOB or TEXT instead"
- fre "Champ '%-.64s' trop long (max = %d). Utilisez un BLOB"
- hun "A(z) '%-.64s' oszlop tul hosszu. (maximum = %d). Hasznaljon BLOB tipust inkabb."
- ita "La colonna '%-.64s' e` troppo grande (max=%d). Utilizza un BLOB."
- norwegian-ny "For stor nykkellengde for felt '%-.64s' (maks = %d). Bruk BLOB istadenfor"
- por "Comprimento da coluna '%-.64s' grande demais (max = %d); use BLOB em seu lugar"
- rum "Lungimea coloanei '%-.64s' este prea lunga (maximum = %d). Foloseste BLOB mai bine"
- spa "Longitud de columna demasiado grande para la columna '%-.64s' (maximo = %d).Usar BLOB en su lugar"
+ nla "Te grote kolomlengte voor '%-.64s' (max = %lu). Maak hiervoor gebruik van het type BLOB"
+ eng "Column length too big for column '%-.64s' (max = %lu); use BLOB or TEXT instead"
+ fre "Champ '%-.64s' trop long (max = %lu). Utilisez un BLOB"
+ hun "A(z) '%-.64s' oszlop tul hosszu. (maximum = %lu). Hasznaljon BLOB tipust inkabb."
+ ita "La colonna '%-.64s' e` troppo grande (max=%lu). Utilizza un BLOB."
+ norwegian-ny "For stor nykkellengde for felt '%-.64s' (maks = %lu). Bruk BLOB istadenfor"
+ por "Comprimento da coluna '%-.64s' grande demais (max = %lu); use BLOB em seu lugar"
+ rum "Lungimea coloanei '%-.64s' este prea lunga (maximum = %lu). Foloseste BLOB mai bine"
+ spa "Longitud de columna demasiado grande para la columna '%-.64s' (maximo = %lu).Usar BLOB en su lugar"
ER_WRONG_AUTO_KEY 42000 S1009
diff -Nrup a/sql/sql_yacc.yy b/sql/sql_yacc.yy
--- a/sql/sql_yacc.yy 2007-08-01 20:39:11 -04:00
+++ b/sql/sql_yacc.yy 2007-08-10 18:14:50 -04:00
@@ -3284,8 +3284,11 @@ field_option:
| ZEROFILL { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; };
opt_len:
- /* empty */ { Lex->length=(char*) 0; } /* use default length */
- | '(' NUM ')' { Lex->length= $2.str; };
+ /* empty */ { Lex->length=(char*) 0; } /* use default length */
+ | '(' NUM ')' { Lex->length= $2.str; }
+ | '(' LONG_NUM ')' { Lex->length= $2.str; }
+ | '(' ULONGLONG_NUM ')' { Lex->length= $2.str; }
+ | '(' DECIMAL_NUM ')' { Lex->length= $2.str; };
opt_precision:
/* empty */ {}
diff -Nrup a/sql/unireg.h b/sql/unireg.h
--- a/sql/unireg.h 2007-07-05 06:34:11 -04:00
+++ b/sql/unireg.h 2007-08-10 18:14:51 -04:00
@@ -60,6 +60,7 @@
#define MAX_MBWIDTH 3 /* Max multibyte sequence */
#define MAX_FIELD_CHARLENGTH 255
#define MAX_FIELD_VARCHARLENGTH 65535
+#define MAX_FIELD_BLOBLENGTH UINT_MAX
#define CONVERT_IF_BIGGER_TO_BLOB 512 /* Used for CREATE ... SELECT */
/* Max column width +1 */