[mysql]数据类型精讲下
目录
ENUM类型
SET类型
二进制字符串类型
BLOB类型
JSON类型
空间类型
小结:
课后练习
ENUM类型
也被叫枚举类型,
就是因为这里面都是文本字符串类型,所以经常被归类到文本字符串类型.
这里我们插入数据的时候,就必须是在这5个类型中选择
这里大写的也可以插入,因为mysql是忽略大小写的.如果我们输入数字代表的就是对应的位置,比如春代表的就是1,夏代表2,...字符串数字也可以.并且我们是可以输入NULL值.
SET类型
SET类型代表的就是可以输入多个类型
,,比如A,B,C,A
看这个表格就可以知道,我们set和ENUM是什么时候使用了.
开发的时候我们用char和varchar会比较多一些
二进制字符串类型
BINARY与VARBINARY类型
储存视频和图片等二进制类型
BINARY代表是就是固定长度的二进制字符串
VARBINARY(M)代表的是可变长度的二进制字符串,M表示是最多能储存的字节
M是必须填写的,和我们的char和varchar是很相似的
这里重要的区别就是长度测试的时候,无论什么时候长度都是设定的长度BINARY
BLOB类型
存储图片和音频类型
我们一般不会用它来存储图片和音频,我们会把它的内存存储到数据库的磁盘中,然后将本地链接存储到数据库中.
然后查看这个表,点击对应的空来导入图片和音频.
TEXT和BLOB如果删除后会留下很大的空洞,
除非前缀索引否则尽量不要使用SELECT查询
储存BLOB和text的时候最好还是让他们单独一个表,避免执行查询的时候网络传输大量的BLOB和TEXT的值
JSON类型
是一个多层嵌套表的格式,是一种轻量的数据交换格式.比如我们要查询
这里我们也是用字符串格式来存储json格式,但是这个字符串是固定格式的,我们是可以使用->来操作json格式的
比如我想要表test_json中的字段js的name内容,那么我就可以使用
SELECT js ->’$.name’ AS NAME
FROM test_json
这样我们就可以获取到NAME字段
空间类型
这个到时候要用的时候大家再具体搜索,
小结:
如果数据是整数就使用INT,如果是小数,就使用DECIMAL(M,D)如果是日期和时间就使用DATETIME,确保你的系统不会因为数据类型定义储存,效率不是最高的.但是可靠性是最大的
字符串的选择就参考阿里巴巴的开发手册:
1.任何字段如果是非负数,就必须使用UNSIGNED
2.小数全部使用DECIMAL
FLOAT和DOUBLE都存在精度损失的问题,很可能在比较值的时候得到错误的结果,如果存储的数据范围超过了DECIMAL的时候就分为整数和小数
- 如果字符串短或字符串长度差不多,就使用CHAR
- VARCHAR在你的字符串不确定长度的时候使用,长度长且变化大的情况下使用VARCHAR,当长度超过了5000的时候就不能在使用varchar,要使用TEXT了TEXT要记得单独建立一个表,因为TEXT操作的时候容易出现空洞导致文件碎片化.所以最好还是单独建立一个表使,原表的文档字段长度固定.
课后练习
掌握mysql规范的各种数据类型
熟悉数据类型常设置的属性
DECIMAL一定要加上M和D,UNSIGN非负属性之类的
掌握不同类型的使用场景