数据类型作用
给表字段指定存储格式、约束、有效范围,MySQL主要有以下几种数据类型:
数值类型
类型 | 关键字 | 字节 | 无符号最小值 | 无符号最大值 |
---|
整数 | TINYINT | 1 | 0 | 28-1 |
整数 | SMALLINT | 2 | 0 | 216-1 |
整数 | MEDIUMINT | 3 | 0 | 224-1 |
整数 | INT | 4 | 0 | 232-1 |
整数 | BIGINT | 8 | 0 | 264-1 |
浮点数 | FLOAT | 4 |
±
1.175494351
E
−
38
\pm1.175494351E-38
±1.175494351E−38 |
±
3.402823466
E
+
38
\pm3.402823466E+38
±3.402823466E+38 |
浮点数 | DOUBLE | 4 |
±
2.2250738585072014
E
−
308
\pm2.2250738585072014E-308
±2.2250738585072014E−308 |
±
1.7976931348623157
E
+
308
\pm1.7976931348623157E+308
±1.7976931348623157E+308 |
定点数 | DECIMAL(M,D) | M+2 | 和Double一致 | 和Double一致 |
位类型 | BIT | 1~8 | BIT(1) | BIT(64) |
- 有符号情况下,由于需要一位表示符号,因此数值范围为 -2M*8-1~+2M*8-1-1 ,其中M表示字节数。
- 单精度 符号位1 + 指数位8 + 尾数位23
- 双精度 符号位1 + 指数位11 + 尾数位52
- 宽度定义,类似INT(8)表示宽度为8位,表示如果数值宽度小于8位时在数字前面填满宽度,和zerofill搭配使用。
字符串类型
字符串类型 | 字节 | 备注 |
---|
CHAR(M) | M | M为0~255之间整数 |
VARCHAR(M) | | M为0~65535之间整数 |
BLOB | | 允许长度0~65535字节 |
TEXT | | 允许长度0~65535字节 |
LONGTEXT | | 允许长度0~4294967295字节 |
… | … | … |
- CHAR和VARCHAR的区别
- CHAR的长度固定为声明的长度,而VARCHAR中的值为可变长字符串
- 检索的时候,CHAR列删除了尾部的空格,而VARCHAR会保留空格
日期和时间类型
数据类型 | 字节 | 最小值 | 最大值 |
---|
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12:31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年某个时刻 |
DATE | 4 | 1000-01-01 | 9999-12-31 |
TIME | 3 | -838:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
- DATETIME和TIMESTAMP的区别是什么?
- TIMESTAMP的时间范围较小,不适合存放比较久远的数据
- 表中第一个TIMESTAMP列默认值自动设置为current_timestamp,其他TIMESTAMP的列默认值为’0000-00-00 00:00:00’
- TIMESTAMP类型和时区相关,不同时区的人看到的时间是不一样的,而DATETIME只能反映插入时的本地时区。