| 类型 | 有符号 | 无符号 | 大小(Bytes) | 用途 |
|---|---|---|---|---|
| TINYINT | (-128, 127) | [0, 255] | 1 | 非常小的整数值 |
| SMALLINT | (-32768, 32767) | [0, 65535] | 2 | 较小的整数值 |
| MEDIUMINT | -8388608, 8388607 | [0, 2^24-1] | 3 | 中等大小整数值 |
| INT 或 INTEGER | (-2 147 483 648,2 147 483 647) | [0, 2^32-1] | 4 | 标准整数 |
| BIGINT | [0, 2^64-1] | 8 | 较大整数值 |
| 类型 | 有符号 | 无符号 | 大小(Bytes) | 用途 |
|---|---|---|---|---|
| FLOAT | 4 | 单精度 浮点数值 | ||
| DOUBLE | 8 | 双精度 浮点数值 | ||
| DECIMAL(M, D) | 依赖于 M 和 D 的值 | m | 可以存储大整数或高精度,可以理解为字符串处理 |
UNSIGNED 属性只针对整型,表示无符号的意思(相当于禁用负值)。
取值范围如果加了 UNSIGNED,则最大值翻倍,例如,TINYINT 类型最大是 127,那 TINYINT UNSIGNED 最大就可以到 127 * 2 => 255。
| 类型 | 大小(Bytes) | 用途 |
|---|---|---|
| CHAR | 0-255 | 定长字符串 |
| VARCHAR | 0-65535 | 可变长字符串 |
| TINYBLOB | 0-255 | 不超过 255 个字符的二进制字符串 |
| TINYTEXT | 0-255 | 短文本字符串 |
| BLOB | 0-65535 | 二进制形式的长文本数据 |
| TEXT | 0-65535 | 长文本数据 |
| MEDIUMBLOB | 0-16777215 | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16777215 | 中等长度文本数据 |
| LONGBLOB | 0-4294967295 | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4294967295 | 极大文本数据 |
注意事项:
CHAR(n) 和 VARCHAR(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符CHAR(n) 若存入字符数小于 n,则以空格补于其后,查询之时再将空格去掉,所以 CHAR 类型存储的字符串末尾不能有空格VARCHAR 若存储内容超出设置长度,内容将被截断VARCHAR 是存入的实际字符数 +1 个字节(n <= 255)或 2 个字节(n > 255),所以 VARCHAR(4),存入 3 个字符要占用 4 个字节,CHAR 类型的字符串检索速度要比 VARCHAR 类型的快VARCHAR 可指定 n,TEXT 不能指定,内部存储 VARCHAR 是存入的实际字符数 +1 个字节(n <= 255)或 2 个字节(n > 255),TEXT 是实际字符数 +2 个字节,TEXT 类型不能有默认值。BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。| 编码字符 | 一个字母 | 一个中文字符 | 字母标点 | 中文标点 |
|---|---|---|---|---|
| ASCII 码 | 1 字节 | |||
| UTF-8 编码 | 1 字节 | 3 字节 | 1 字节 | 3 字节 |
| Unicdoe 编码 | 2 字节 | 2 字节 | 2 字节 | 2 字节 |
| GB 2312 编码或 GBK 编码 | 1 字节 | 2 字节 | 1 字节 | 2 字节 |
| UTF-16 | 2 字节 | 2 字节 | 2 字节 | 2 字节 |
| UTF-32 | 4 字节 | 4 字节 | 4 字节 | 4 字节 |
| Latin1 | 1 字节 | 1 字节 |
每个时间类型有一个有效值范围和一个”零“值,当指定不合法的 MySQL 不能表示的值时使用”零“值。
| 类型 | 大小(Bytes) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01 / 9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | -838:59:59 / 838:59:59 | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901 / 2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00 / 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4 | 1970-01-01 00:00:00 / 2038 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |