数据库的数据类型问题
到目前为止实习的话百分之50都够用了
现在只是认识一下数据类型,还轮不到你一个实习生来写表
查询数据库不是想的那么简单
对于mysql,常用的数据类型就那几个
但是有的公司要求类型比较严格,在定义的时候感觉浪费几个空间就是在犯罪
这个时候不是你来考虑的,更不是一个实习生来考虑的
大公司有专门的数据库管理员,DBA,你个臭后端碰瓷人家什么
国际化有时候是很麻烦的,要考虑很多,这个字段到底定义成什么类型, gender你只写了0和1,但是泰国有人妖怎么办
初学的时候,可能会有疑问,我这个字段到底应该使用什么样的数据类型
这个时候不要疑问,因为这个东西根本不是根据你来定义的,这个是根据具体的项目,具体的使用场景,数据库架构师来制定的,跟你没关系
开发的最高境界就是不需要沟通
数据库到最后就变得越来越复杂
数据库数据类型的选用没有统一的标准,但是一定要符合业务项目的逻辑
int类型
如何使用unsigned
这里主包想要把id改的时候发i西安没法改,看来是只能先删除,然后重新加一个
这样就OK了,注意unsigned
是写在数据类型的后面哦
这里数据类型的后面有6和3,这个是宽度的意思,但是实际上还是本身所能容纳的数字长度,好像和宽度没啥关系
浮点数
float
和double
直接上实际应用
注意这里的写法是(数字,数字)
前面的代表总共有几个位,后面代表小数有几个位
比如float(3,2)
就意思只能表达个位,但是小数有两位
如果你添加的时候,添加的位数多了,这样的话就四舍五入
这样的话就出现了问题,数据就会变得不准确
毕竟谁也不希望银行的钱突然变得很多或者是突然变得很少
主包突发奇想,如果四舍五入超出了该怎么办,没想到直接就显示超出咧
double
还是会存在丢失精度的问题
一般情况下在数据库中一般不会被使用
有专门的数来应对
DECIMAL
定点数
这个就不会丢失精度,这个数据类型的使用方法和float啥的一样
为什么不会丢失精度是因为整数和小数是分开存的,那能不准吗?
定点数也支持无符号,但是准确带来的问题就是存储空间必然会占的很多
字符串与文本类型
varchar
会回收多余的字节
意味着在实际使用中你定了varchar(20)
,但是输入的是'yyy
,这样的话就给你把多余的回收了
但是varchar
的效率很低,因为要回收嘛
这里可以存储的长度是和字符集编码有关系的,uft8和gbk对每个字符规定的字符长度不一样就会导致使用不同的编码形式存储的文本长度也不一样
布尔类型
boolean
插入的时候选择true
或者是false
枚举类型
演示一下了,因为可能用不到
gender enum('man', 'women', '?')
如图所示,让我们试一下插入吧
注意这里插入的类型必须是gender的枚举中存在的类型,不允许插入不存在的类型
枚举是通过整数来管理数据的
如图所示,枚举里面第一个是1,也是就man,第二个是2,第三个是3
注意这里的第一个是从1开始的,而不是从0开始
实际情况就是通过整数1,2,3来存储的
存储的时候,直接用整数存储可以
枚举类型就是速度快,而且已经限制了数据,节省空间
枚举类型一个占两个字节,最多能存6万多个
set类型
枚举类型是从中选取一个数据,set类型就是可以从中选好多个数据
一个用户的兴趣可以有多种标签
这样就OK了,无论你选数据的时候是怎么选的,但是最后显示的时候还是会按照原本set中的顺序来显示
数据库对空格非常敏感values('women', 'IT,经济学')
这段话主包只是多加了一个空格values('women', 'IT, 经济学')
经济学那里多加了一个空格,然后就给主包报错,艹
不可以插入没有的数据
set的也是用下标存储的,这个是用2的几次方来分配的
比如第一个是2的0次方,第二个是2的1次方,如此类推
如图所示
日期和时间类型
一般来说, 每个数据都要有这样的数据类型,用来说明是什么时候插入的,是什么时候更新的
一般情况下都是使用datatime类型
这样插入就可以,注意要遵循这个格式,但是一般不会手动去插入语言,都是有脚本来自动插入
micro_frank