介绍
常见数据类型
数值型
-
整形
-
小数
-
定点数
-
浮点数
字符型
-
较短的文本
- char
- varchar
-
较长的文本
- text
- blob(较长的二进制数据)
日期型
数值型-整型
整数类型 | 字节 | 范围 |
---|---|---|
Tinyint | 1 | 有符号:-128127无符号:0255 |
Smallint | 2 | 有符号:-3276832767无符号:065535 |
Mediumint | 3 | 有符号:-83886088388607无符号:01677215 |
Int、Integer | 4 | 有符号:-21474836482147483647无符号:04294967295 |
Bigint | 8 | 有符号:-92233720368547758089223372036854775807无符号:018446744073709551615 |
特点
- 如果不设置长度,会有默认长度,长度代表了显示的最大宽度,如果不够用0在左边填充,但必须搭配 zerofill 使用,只用了 zerofill ,默认会修改为无符号
- 如果插入的数值超出了整型的范围,会报 out of range异常,并插入临界值
- 不设置无符号或有符号,默认是有符号,设置无符号关键字:unsigned
术语解释
整型中的长度代表的是插入数据的宽度,而不是通俗理解的数据位数的限制。
举例:
create table demo(id int(2)); 这里的 id 的长度为2,意思不是id最大到 99 ,而是 id
的宽度 为 2,满足正常显示,不满足2为会在前面补“0”,为了体现这一效果,必须加
zerofill 关键字,如:create table demo(id int(2) zerofill); 注意,加了此关键字,默认该
字段就改为无符号的。
操作如图:
如不加 zerofill 关键字:
数值型-小数
浮点数 | 字节 | 范围 |
---|---|---|
float(M, D) | 4 | ±1.75494351E-38~±3.402823466E+38 |
double(M, D) | 8 | ±2.2250738585072014E-308~±1.7976931348623157E+308 |
定点数 | 字节 | 范围 |
DEC(M, D)DECIMAL(M, D) | M+2 | 最大取值范围与 double 相同,给定 decimal 的有效取值范围由 M 和 D 决定 |
特点
- M:代表的整数部位+小数部位。D:代表的是小数部位,如果超过范围,则插入临界值
- M和D都可以省略,如果类型是 decimal ,则 M 默认是10,D默认是0,如果是 float 或 double,则会根据插入的数值的精度,来决定精度
- 定点型的精度度较高,如果要求插入的数值的精度较高(如:货币运算等)则考虑使用
浮点型
1、float
2、double
3、decimal
字符型
较短的文本
字符串类型 | 最多字符数 | 写法 | M的意思 | 特点 | 描述及存储需求 | 效率 |
---|---|---|---|---|---|---|
char(M) | M | char(M) | 最大的字符数,可省略,默认为 1 | 固定长度的字符,较浪费空间。 | M为0~255之间的整数 | 较高 |
varchar(M) | M | varchar(M) | 最大的字符数,长度不可省略 | 可变长度的字符,较节约空间。 | M为0~65535之间的整数 | 较低 |
除了char、varchar的文本类型:
- binary、varbinary类型,类似于char和varchar,不同的是它们包含二进制字符串而不包含非二进制字符串。
- Enum类型,又称为枚举类型,要求插入的值必须是列表中指定的值之一。
- Set类型,和Enum类型类似,里面可以保存0~64个成员。和 Enum 类型最大的区别是:Set类型一次可以选取多个成员,而 Enum 只能选一个根据成员个数不同,存储所占字节也不同
Set类型所占字节表:
成员数 | 字节数 |
---|---|
1~8 | 1 |
9~16 | 2 |
17~24 | 3 |
25~32 | 4 |
33~64 | 8 |
较长的文本
1、text
系统中提供的四种text:
- Tinytext:系统使用一个字节来保存,实际能够存储的数据为:2 ^ 8 + 1
- Text:使用两个字节保存,实际存储为:2 ^ 16 + 2
- Mediumtext:使用三个字节保存,实际存储为:2 ^ 24 + 3
- Longtext:使用四个字节保存,实际存储为:2 ^ 32 + 4
2、blob(保存较大的二进制)
存储二进制文本(图片,文件),一般都不会使用blob来存储文件本身,通常是使
用一个链接来指向对应的文件本身。
日期型
日期和时间类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
date | 4 | 1000-01-01 | 9999-12-31 |
datetime | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
timestamp | 4 | 19700101080001 | 2038年的某个时刻 |
time | 3 | -838:59:59 | 838:59:59 |
year | 1 | 1904 | 2155 |
datetime 和 timestamp的区别
- Timestamp支持的时间范围较小,取值范围 197001010800012038年的某个时刻,Datetime的取值范围:1000-01-019999-12-31
- timestamp和实际时区有关,更能反映实际的日期,而datetime则只能反映出插入时的当地时区
- timestamp的属性受Mysql版本和SqlMode(Mysql的环境变量)的影响很大。