In some cases, MySQL silently changes column specifications
from those given in a CREATE TABLE or
ALTER TABLE statement. These might be
changes to a data type, to attributes associated with a data
type, or to an index specification.
Some silent column specification changes include modifications to attribute or index specifications:
TIMESTAMP display sizes are discarded.
Also note that TIMESTAMP columns are
NOT NULL by default.
Columns that are part of a PRIMARY KEY
are made NOT NULL even if not declared
that way.
Trailing spaces are automatically deleted from
ENUM and SET member
values when the table is created.
MySQL maps certain data types used by other SQL database vendors to MySQL types. See Section 11.7, “Using Data Types from Other Database Engines”.
If you include a USING clause to
specify an index type that is not legal for a given
storage engine, but there is another index type available
that the engine can use without affecting query results,
the engine uses the available type.
Possible data type changes are given in the following list. These occur only up to the versions listed. After that, an error occurs if a column cannot be created using the specified data type.
Before MySQL 5.0.3, VARCHAR columns
with a length less than four are changed to
CHAR.
Before MySQL 5.0.3, if any column in a table has a
variable length, the entire row becomes variable-length as
a result. Therefore, if a table contains any
variable-length columns (VARCHAR,
TEXT, or BLOB), all
CHAR columns longer than three
characters are changed to VARCHAR
columns. This does not affect how you use the columns in
any way; in MySQL, VARCHAR is just a
different way to store characters. MySQL performs this
conversion because it saves space and makes table
operations faster. See Chapter 14, Storage Engines and Table Types.
Before MySQL 5.0.3, a CHAR or
VARCHAR column with a length
specification greater than 255 is converted to the
smallest TEXT type that can hold values
of the given length. For example,
VARCHAR(500) is converted to
TEXT, and
VARCHAR(200000) is converted to
MEDIUMTEXT. Similar conversions occur
for BINARY and
VARBINARY, except that they are
converted to a BLOB type.
Note that these conversions result in a change in behavior with regard to treatment of trailing spaces.
As of MySQL 5.0.3, a CHAR or
BINARY column with a length
specification greater than 255 is not silently converted.
Instead, an error occurs. From MySQL 5.0.6 on, silent
conversion of VARCHAR and
VARBINARY columns with a length
specification greater than 65,535 does not occur if strict
SQL mode is enabled. Instead, an error occurs.
Before MySQL 5.0.10, for a specification of
DECIMAL(,
if M,D)M is not larger than
D, it is adjusted upward. For
example, DECIMAL(10,10) becomes
DECIMAL(11,10). As of MySQL 5.0.10,
DECIMAL(10,10) is created as specified.
To see whether MySQL used a data type other than the one you
specified, issue a DESCRIBE or
SHOW CREATE TABLE statement after creating
or altering the table.
Certain other data type changes can occur if you compress a table using myisampack. See Section 14.1.3.3, “Compressed Table Characteristics”.

User Comments
Add your own comment.