MySQL 数据(字段)类型
在创建表的时候,要明确定义字段对应的数据类型。MySQL 主要的数据类型分为数值类型、字符串(文本)类型、时间日期类型和其他类型几类。
数值类型
类型 | 说明 | 例子 |
---|---|---|
tinyint | 存储范围:-128至127或0至255 | tinyint(1) |
smallint | 存储范围:-32768至32767或0至65535 | smallint(3) |
mediumint | 存储范围:- 8388608至8388607或0至16777215 | mediumint(5) |
int | 存储范围:- 2147483648至2147483647或0至4294967295 | int(10) |
bigint | 存储范围:- 9223372036854775808至9223372036854775807或0至18446744073709551615 | bigint(10) |
float | 最小非零值:±1.175494351E – 38,同double一样适用于精度要求高的场合 | float(3,1) |
double | 最小非零值:±2.2250738585072014E - 308 | double(10,5) |
decimal | 取值范围可变,以来括号内的显示尺寸和小数点位数而定,适用于对精度要求不高但准确度要求非常高的场合 | decimal(10,2) |
补充说明
- 在 int(integer) 系列中,只能存储整型值,且可以在后面用括号指定显示的尺寸(M),如果不指定则会默认分配。如果实际值的显示宽度大于设定值,将会显示实际值而不会截断以适应显示尺寸。如 smallint(3) 中的 3 即为显示尺寸,即显示三位的数值(不包括 - 号)
- int 类型可以指定 UNSIGNED 属性,即无符号(非负),所以存储范围有两种
- 在 float、double 及 decimal 类型中,不能指定 UNSIGNED 属性,其显示尺寸包含了小数点精度(D),即 float(3,1) 保存范围为 -99.9 至 99.9
- decimal 必须指定显示尺寸(M)和小数点精度(D),float 和 double 都是可选的
- 在可能涵盖取值范围的基础上,尽可能选择较小的类型以提高效率和节约存储空间,如年龄,就选择 tinyint(3) 。该原则对于字符类型同样适用
字符串(文本)类型
类型 | 说明 | 例子 |
---|---|---|
char | 支持固定长度的字符串, 最大长度是 255 个字符 | char(100) |
varchar | 支持可变长度的字符串, 最大长度是 65535 个字符 | varchar(1000) |
tinytext | 支持可变长度的字符串,最大长度是 255 个字符 | tinytext |
text blob |
支持可变长度的字符串,最大长度是 65535 个字符 | text |
mediumtext mediumblob |
支持可变长度的字符串,最大长度是 16777215 个字符 | mediumtext |
longtext longblob |
支持可变长度的字符串,最大长度是 4294967295 个字符 | longtext |
enum | 枚举类型,可存储最多65535 个成员,常用于取值是有限而且固定的场合 | enmu("男","女") |
set | 集合类型,可存储最多64个成员 | set("value1","value2", ...) |
补充说明
char 和 varcha 需要指定长度,不同的是,char 存储时总是按照指定的长度储存,而 varchar 则根据实际字符串长度再加上一个字节分配空间。
时间日期类型
类型 | 说明 | 例子 |
---|---|---|
date | YYYY-MM-DD 格式表示的日期值 | date |
time | hh:mm:ss 格式表示的时间值 | time |
datetime | YYYY-MM-DD hh:mm:ss 格式表示的日期和时间值 | datetime |
timestamp | YYYYMMDDhhmmss 格式表示的时间戳值 | timestamp |
year | YYYY 格式表示的年份值 | year |
提示
在 PHP 中,一般情况下对于时间都是按照 UNIX 时间戳以 int 类型存储于表中,再根据实际需要用 PHP 的时间函数进行处理,但不完全都是这样。
参考阅读
《PHP 数据类型》