MYSQL数据类型
一.目标
1.掌握常用的数据类型
2.针对业务选择合适的数据类型
二.MySQL数据类型扫盲
1.整型
int、smallint、mediumint、bigint
举个栗子:
int(11) 和 int(21) 有什么区别?
其实这两者没有任何区别,无论是存储空间还是存储范围都是一样的。比如你存储一个1,采用int(11),前边会给你补充10个0,int(21),前边会补充20 个0。
只是显示方式有区别,没有本质区别。
2.浮点型
float、double
double虽然比float精度高,然而他们都属于非精度类型,这就会出现精度丢失的问题。
MySQL为我们提供了我更精确的数据类型,decimal,常用来存储交易相关的数据。Decimal(M,N):m代表总精度,n代表小数点右侧的位数。1<M<254 , 0<N<60,存储空间变长。
相比于浮点类型,double、float是属于定长的数据类型,前者占8字节、后者占4字节。
存储性别、省份、类型等分类信息时,优先使用tinyint和enum。
int和bigint之间做选择的时候,优先选择bigint。(随着业务的增长,int是根本无法满足业务需求的)
存储交易等高精度数据时,建议使用decimal。
3.char和vachar
char与varchar存储的单位都是字符。
char存储定长,容易造成空间浪费。
varchar存储变长,节省存储空间。
存储情况:
从图中可以看出,char白白浪费了三个空间,但是varchar占用了8个空间。
text与char和varchar的区别。
char与varchar定义的长度是字符长度,不是字节长度。
存储字符串优先使用varchar(N),N尽量小一些。
虽然数据库存储二进制数据,但是性能低下,强烈不建议使用。
中文字符,对于gbk编码,一个中文占两个字节、对于utf8编码一个中文占3个字节,对于utf8mb4一个中文可占三个字节也可占四个字节。MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。其实,utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。当然,为了节省空间,一般情况下使用utf8也就够了。既然utf8应付日常使用完全没有问题,为什么还要使用utf8mb4呢?原因就是低版本的MySQL支持的utf8编码,最大字符长度为3字节,如果遇到4字节的字符就会发生错误。utf8mb4最经典的业务场景就是存储emoji表情。
存储emoji表情,以java程序为例,MySQL必须5.5.3之后,jdbc驱动程序必须5.1.13之后。
datetime和timestamp
函数UNIX_TIMESTAMP(now()) :将时间转换为时间戳。
存储时间可以选择:datetime、timestamp、bigint