Quick Reference of MySQL Data Types
Once you have identified all of the tables and columns that the database will need,you should determine each field’s MySQL data type.
When creating the database, as you will do in the next chapter, MySQL requires that you define what sort of information each field will contain. There are three primary categories, which is true for almost every database software:
- Text
- Numbers
- Dates and times
Within each of these, there are a number of variants—some of which are MySQL-specific—you can use. Choosing your column types correctly not only dictates what information can be stored and how, but
also affects the database’s overall performance.
The most
of the available Data types for use with MySQL
databases.
MySQL Datatypes |
||
|
Ty p e |
S i z e |
D e s c r i p t i o n |
|
CHAR[Length] |
Length bytes |
A fixed-length field |
|
VARCHAR(Length) |
String length + 1 bytes |
A fixed-length field |
|
TINYTEXT |
String length + 1 bytes |
A string with a maximum |
|
TEXT |
String length + 2 bytes |
A string with a maximum |
|
MEDIUMTEXT |
String length + 3 bytes |
A string with a maximum |
|
LONGTEXT |
String length + 4 bytes |
A string with a maximum |
|
TINYINT[Length] |
1 byte |
Range of -128 to 127 or |
|
SMALLINT[Length] |
2 bytes |
Range of -32,768 to |
|
MEDIUMINT[Length] |
3 bytes |
Range of -8,388,608 to |
|
INT[Length] |
4 bytes |
Range of -2,147,483,648 |
|
BIGINT[Length] |
8 bytes |
Range of |
|
FLOAT |
4 bytes |
A small number with a |
|
DOUBLE[Length, |
8 bytes |
A large number with a |
|
DECIMAL[Length, |
Length + 1 or Length + |
A DOUBLE stored as a |
|
DATE |
3 bytes |
In the format of |
|
DATETIME |
8 bytes |
In the format of |
|
TIMESTAMP |
4 bytes |
In the format of |
|
TIME |
3 bytes |
In the format of |
|
ENUM |
1 or 2 bytes |
Short for enumeration, |
|
SET |
1, 2, 3, 4, or 8 bytes |
Like ENUM except that |
Many of the types can take an optional Length attribute, limiting their size (the square brackets, [], indicate an optional parameter to be put in parentheses, while parentheses themselves indicate required arguments).
Further, the number types can be UNSIGNED—limiting the column to positive numbers or zero—or be defined as ZEROFILL, which means that any extra room will be padded with zeroes (ZEROFILLs are also automatically UNSIGNED).You’ll primarily use the DATE and TIME fields without modification, so you need not worry too much about their intricacies. There are also two extensions of the TEXT types that result in a different behavior—ENUM and SET—which allow you to define a series of acceptable values when creating the table. An ENUM field can have only one of a possible several thousand values, while SET allows for several of up to 64 possible values.
There are two caveats with ENUM and SET: These types are not supported by other databases, and their usage undermines normalization.