MySQL数据类型详解(全网最全)
1、数据类型之间的关系
第1节的目的:就是在看这篇博客之前迅速熟悉这些数据类型的关键字,以至于不会对这些数据类型感到很陌生,这样做的好处就是能够更容易的往后面读,以至于不会产生抵触。我这么细节还不给个三连~
char&varchar
和binary$varbinary
blob
和text
整型和浮点型
2、数据类型详解
2.1、基础知识
字符(char)
字节(byte)
- 一个字节等于八比特位(bit)
- 假设声明一个字段位
int
型,那么这个字段就占4个字节,也就是4*8=32比特位,因此该字段的取值范围就是(-231~231);如果被unsign zerofill
修饰,那么取值范围就是(0~2^32)
2.1、字符串类型
类型 | 范围(字节) | 说明 |
---|---|---|
char | 0~255 | 长度固定;超出指定范围进行截取,没有超出指定范围以空格进行填充 |
varchar | 0~65535 | varchar(20)修饰某个字段时,指的是只能存放20个字符;可以自定义长度且长度可变 |
blob | 0~65535(2^16-1) | “二进制对象”一般用来存储字节文件,比如图片、音乐等 |
tinyblob | 0~255(2^8-1) | |
mediumblob | 0~16772150(2^24-1) | |
longblob | 0~4294967295(2^32-1) | |
text | 0~65535(2^16-1) | 一般用来存储文本内容,无需指定大小 |
tinytext | 0~255(2^8-1) | |
mediumtext | 0~16772150(2^24-1) | |
longtext | 0~4294967295(2^32-1) |
数值类型
类型 | 范围 | 精度 | 大小 | 说明 |
---|---|---|---|---|
tinyint | -128~127 | 1个字节 | ||
smallint | -32768~32767 | 2个字节 | ||
mediumint | -8388608~8388607 | 3个字节 | ||
int | -231~231-1 | 4个字节 | unsigned:无符号数,一般常用来扩大范围 | |
bigint | -263~263-1 | 8个字节 | ||
float | 大约6~9位数字 | 4个字节 | ||
real | ||||
double | 大约15~17位数字 | 8个字节 | ||
decimal | 大约28~29位数字 | |||
numeric |
日期类型
类型 | 格式 | 说明 |
---|---|---|
time | HH:mm:ss | 时:分:秒 |
timestamp | 毫秒数 | 时间戳,从1970年0时0分0秒 |
date | YY:MM:dd | 年:月:日 |
datetime | YY:MM:dd HH:mm:ss | 年:月:日:时:分:秒(最常用时间格式) |
year | YY | 只返回年份 |
布尔类型
类型 | 范围 | 说明 |
---|---|---|
boolean | 取值:true、false | |
bool | 取值:1、0 | |
二进制数据类型
类型 | 范围(字节) | 说明 |
---|---|---|
binary | 0~8000 | 二进制数据类型;它们二者之间的区别和char和varchar类似; |
varbinary | 0~8000 | 定义时需要指定长度 |
bit | 位 | |
特殊类型
类型 | 范围 | 说明 |
---|---|---|
enum | ||
set | ||
json |
2、数据类型之间的区别
2.1、字符串类型
char和varchar之间的区别
- char牺牲空间换时间
- char类型长度固定:没有超出指定长度,以空格补充;超出指定长度,超出部分截掉
- varchatr牺牲时间换空间
- varchar长度可变,即使指定了字符的多少数量,也可以比指定的数量少(伸缩性)
- 因此:char存取效率高于varchar,varchar空间利用率高于char
blob和text的区别
想提的问题
int(10)、char(10)、varchar(10)
中的数字10是什么意思?
int(10)
:这里的数字10并不是表示修饰字段的范围大小,而仅仅表示显示的数值的宽度(也可以说是数值位数)char(10)和varchar(10)
:这里的数字10表示可存储的字符的多少(mysql5.0以上,char(10)和varchar(10)
中的10都表示10个字符,也就是说无论存储字母数字还是汉字都能存储10个)
int(10)和int(10)
的区别
- 考察这里的数字“10”表示的是什么意思
- 再加上int整型类型的取值范围即可得到答案