MySql的数据类型介绍
一、整数类型
类型名称 | 存储需求 | 有符号范围 | 无符号范围 |
TINYINT | 1字节 | -128~127(2的8次方/2) | 0~255 |
SMALLINT | 2字节 | -32768~32767(2的16次方/2) | 0~65535 |
MEDIUMINT | 3字节 | -8388608~8388607(2的24次方/2) | 0~16777215 |
INT(INTEGER) | 4字节 | -2147483648~2147483647(2的32次方/2) | 0~4294967295 |
BIGINT | 8字节 | -9223372036854775808~9223372036854775807 (2的64次方/2) | 0~18446744073709551616 |
备注:在数据库中设计字段时的,如:year INT(4)表示的是该数据类型的显示宽度,显示宽度只是指明MySql最大可能显示的数字个数,当数值的位数小于指定的宽度时会由空格填充。特别注意:显示宽度与其存储的数据没有任何关系。
二、浮点类型和定点数类型
类型名称 | 存储需求 | 有符号范围 | 无符号范围 |
FLOAT | 4字节 | 浮点表示法和Ing类型不一样,后期单独补这一块 | |
DOUBLE | 8字节 | ||
DECIMAL(M,D) | M+2个字节 |
备注:
1、Float和Double在存储的过程中经常会出现精度丢失的情况,这个需要多加注意,同时如果小数位超过设定会进行四舍五入。
2、Decimal 这个类型,可以说是我们用到的最多的类型,因为他在数据库中是以字符串的形式存储的,精度是最高的(用于存储货币、科学数据),同时不会出现四舍五入的情况,如果超出的精度设置直接会被截断。
三、日期类型
类型名称 | 存储需求 | 日期范围 |
YEAR | 1字节 | 1901~2155 |
TIME | 3字节 | -838:59:59~838:59:59 |
DATE | 3字节 | 1000-01-01~9999-12-3 |
DATETIME | 8字节 | 1000-01-01 00:00:00~9999-12-31 59:59:59 |
TIMESTAMP | 4字节 | 1970-01-01 00:00:01~2038-01-19 03:14:07 UTC |
备注:
1、DateTime和Timestamp在用法上基本相同,TimeStamp的存储范围有限制,其中UTC(世界标准时间)。
2、DateTime存储时按照实际输入格式存储,即输入什么就存储什么。TimeStamp存储的是UTC(世界标准时间)格式保存,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时根据当前时区的不同,显示的时间值是不同的。
3、当插入一条记录没有制定TimeStamp这个列的值的时候,会默认设置为当前时间。
4、TimeStamp在空间上比DateTime更高效(4字节:8字节)
四、文本字符串类型
类型名称 | 存储需求 | 备注 |
CHAR(M) | M字节(1<M<255) | 固定长度 |
VARCHAR(M) | L+1字 (L<M;1<M<65535) | 可变长度(MySql5.0.3版本之前是255,5.0.3版本之后最大长度变成了65535) |
TINYTEXT | L+1字节(L<2的8次方) | |
TEXT | L+2字节(L<2的16次方) | |
MEDINUMTEXT | L+3字节(L<2的24次方) | |
LONGTEXT | L+4字节(L<2的32次方) | |
ENUM | 1或2字节(最大65535) | |
SET | 1,2,3,4或8字节,取决于集合数量(最多64个成员) |
备注:
1、char(M)为固定长度字符串,在保存时右侧填充空格以到达指定长度。M的范围是0~255
2、varchar(M)为可变长度字符串,M的长度为0~65535。
char是固定长度,所以处理char的速度比varchar要快,但是char比较浪费空间,同时存储引擎对于char和varchar也有影响。
- MyIsam存储引擎,使用固定长度的char比varchar要好,可以使整个表静态化,检索数据更快,用控件换时间
- InnoDB存储引擎,建议使用varchar,因为InnoDB数据表的存储格式不分固定长度和可变长度,所以使用char和varchar是一样,但是varchar是可变长度的,更加节省空间。所以对磁盘IO和存储数据总量较好
3、enum表示为枚举类型,最多可枚举65535个类型,在数据库存储的是其枚举值和每个值的索引。
4、set类型就是一个不重复的字符串对象,内容以逗号间隔。