4.数据类型

数据类型约束

如果我们向mysql特定的类型中插入不合法的数据,MySQL一般都是直接拦截我们,不让我们做对应的操作。
反过来意味着,我们已经有数据成功插入到mysql了,一定插入的时候都是合法的。

因此,mysql中,一般而言,数据类型本身也是一种:约束(保证数据库中数据是可预期,完整的)
倒逼程序员,让程序员尽可能进行正确的插入。

整形

在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。可以通过UNSIGNED来说明某个字段是无符号的。

tinyint:一字节,范围-128~127,无符号范围0~255

bit(M) : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

bit数值不显示原因:ASCII码显示(mysql5.7),有的字符为不可显字符

解决方案:select id,hex(bit) from 表名; 查找时:转成十进制表示

mysql 8.0.43显示16进制

小数类型

float(m, d) unsigned : M指定显示长度,d指定小数位数,占用空间4个字节

  • 举例:float(4, 2),范围是-99.99 ~ 99.99。
  • 插入99.994,可以成功插入,因为四舍五入成了99.99
  • 插入99.995,插入不了,越界。

如果是 float(4,2) unsigned ,范围是 0~99.99。

decimal(m, d) unsigned : 定点数m指定长度,d表示小数点的位数

作用:比float更加精确

说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。

字符串类型

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

特别注意:长度是和编码集相关的,例如utf8mb3的字符长度是3字节,char(L),L是标识字符的上限个数。

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
特别注意:这个长度是指最大字节数65535,但有1~3个字节是用来存储长度的,所以有效字节数是65532

举例:按照utf8mb3来表示,3字节,65532/3=21844个字符,理论上最多是可以存21844个字符。

**细节点:****mysql的行也是有长度上限的,上限也是65535。**因此如果有2列及以上,有效字节数是小于65532的。

char vs varchar

char:效率高,固定字节数,一块完整开辟

varchar:效率低,可变长度,用多少开多少,因为可变,维护成本高。

日期类型

date :日期 'yyyy-mm-dd' ,占用三字节
datetime:时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节

特别注意:timestamp使用时,如果要插入时自动设置时间戳,要建表时设置默认值为CURRENT_TIMESTAMP,即列名 timestamp default CURRENT_TIMESTAMP。但这仅仅只在插入时起效果,如果想在更新时也起效果,需要设置:列名 timestamp default CURRENT_TIMESTAMP ++on update++ CURRENT_TIMESTAMP.

enum 和 set 类型

enum:枚举,"单选"类型;
enum('选项1','选项2','选项3',...);

作用:单选一个(也可以为NULL)

插入方式:

1)直接指定选项插入

2)用数字,数字值表示的就是选项几,上限65535

set:集合,"多选"类型;
set('选项值1','选项值2','选项值3', ...);

1)选项插入,例:values('选项值1,选项值2')

**2)数字插入。位图式的插入,比如插入选项1,指定1;选项2,指定2;选项3,指定4。类似:000 -> 001(选项1),000 -> 010(选项2),000 -> 110(选项2,,选项3)**选项上限为64个

说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。

特别地:因为集合类型可以选择多个,where字句指定选项选择的话,只能选择100%匹配的。如果想选择包含单个选项的,方法:find_in_set(sub, str_list);

相关推荐
‎ദ്ദിᵔ.˛.ᵔ₎17 小时前
MySQL 表约束
数据库·mysql
linmengmeng_131419 小时前
【总结】MyBatis-Plus批量插入与清表的正确姿势
java·spring boot·mysql·mybatis
达梦数据21 小时前
DMDRS空间数据类型说明:Oracle、DM8、MySQL空间数据类型映射
数据库·mysql·oracle
lusklusklusk1 天前
Oracle索引组织表,SQLServer聚集索引,Mysql Innodb表的数据行不是在磁盘上像排队一样严格连续地存放
mysql·postgresql·oracle·sqlserver
螺蛳粉 螺蛳粉1 天前
mysql的备份与恢复
linux·运维·数据库·mysql
计算机毕设定制辅导-无忧学长1 天前
《基于SpringBoot的中学教师数字胜任力测评网站的设计与实现》
java·vue.js·spring boot·mysql·中学教师数字胜任力测评网站
guo_wen_qiang1 天前
mysql中有哪些日志
数据库·mysql
天天喝旺仔1 天前
MySQL索引优化实战:B+Tree原理、索引失效与覆盖索引调优
数据库·sql·mysql·性能优化
lqg_zone1 天前
CentOS 7 虚拟机磁盘 I/O 卡顿排查实录:从 iostat 异常到虚拟盘后端故障的完整定位
linux·服务器·mysql·centos