Bug #9303 blob field with specified length < 256 does not create tinyblob
| Submitted: | 20 Mar 2005 8:22 | Modified: | 26 Apr 2005 0:02 |
|---|---|---|---|
| Reporter: | Brion Vibber | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 4.1.10a | OS: | Linux (Linux) |
| Assigned to: | Magnus Blåudd | CPU Architecture: | Any |
[24 Mar 2005 10:37]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/23342
[24 Mar 2005 12:50]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/23348
[12 Apr 2005 10:25]
Magnus Blåudd
Pushed to 4.1.10a. Does not exist in 5.0
[26 Apr 2005 0:02]
Paul DuBois
Noted in 4.1.11 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.051 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: When a blob field is given a specified length in CREATE TABLE, MySQL 4.1 and higher select the smallest blob type which will hold that size: eg blob, mediumblob, or longblob. For instance: create table foo(bar blob(100000000)); makes the 'bar' field a longblob. For a length under 256 bytes, the smallest type would be tinyblob, but when issuing: create table foo(bar blob(100)); the larger 'blob' type (with 65536 byte cutoff) is selected instead. This appears to be caused by a typo rather than a deliberate choice of minimum: TINYBLOB is in fact selected, but always overridden by BLOB due to a missing 'else' clause in sql/sql_parse.cc. See the suggested patch. How to repeat: mysql> create table foo(bar blob(100)); Query OK, 0 rows affected (0.01 sec) mysql> show create table foo\G *************************** 1. row *************************** Table: foo Create Table: CREATE TABLE `foo` ( `bar` blob ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec) Suggested fix: Adding an 'else' prevents the larger size from overriding the smaller one: --- mysql-4.1.10a/sql/sql_parse.cc.orig Sat Mar 19 23:24:45 2005 +++ mysql-4.1.10a/sql/sql_parse.cc Sat Mar 19 23:24:55 2005 @@ -4338,7 +4338,7 @@ /* The user has given a length to the blob column */ if (new_field->length < 256) type= FIELD_TYPE_TINY_BLOB; - if (new_field->length < 65536) + else if (new_field->length < 65536) type= FIELD_TYPE_BLOB; else if (new_field->length < 256L*256L*256L) type= FIELD_TYPE_MEDIUM_BLOB;