当前位置: 首页 > news >正文

MySQL常见的数据类型

一、数值型

5 种整型 tinyintsmallintmediumintint bigint,主要区别就是取值范围不同,还可以在类型前添加一个 限制词 unsigned,不允许添加负数。

3 种浮点型:不能精确存放 float double,可以精确存放 decimal numeric

整型数

mysql 提供了 5 种整型:tinyintsmallintmediumintint bigint, 最大的区别就是取值范围tinyint 1Bsmallint 2Bmediumint 3Bint 4Bbigint 8B

整数类型适用场景

1tinyint 一般用于枚举类型,比如系统设定取值范围很小而且固定的场景 。

2smallint 可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等 。

3MediumInt 用于较大整数的计算,比如火车站每日的客流量等 。

4Int 或者 Integer【别名系统】取值范围足够大,一般情况下不用考虑超限问题,用得最多,例如商品编号 。

5BigInt 只有处理特别巨大的整数时才会用到,例如双 11 的交易量、大型门户网站点击量、证券公司衍生产品持仓量等。

浮点数

decimal 和 numeric 作为字符串存储浮点数,可以实现浮点数的精确存储,并不是 float double 种使用二进制浮点数存储。使用方法 numeric(总位宽,小数位数),小数位数必须小于等于总位宽;小数位数最大值 30总位宽最大值为 65,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽。

二、字符串类型

char(n)

定长字符串,n 值用于表示所允许的最大长度,取值范围 0-255,如果不指定长度,默认1

1、长度限制不区分中英文,表示是允许最多存储多少个字符

2、使用 length 函数获取的是字节数,不是字符数。在 utf-8 编码种一个汉字占用 3 个字节。当指定 char n 值大于 0,而插入数据小于 n 值,系统会自动在末尾使用空格补够长度,由于系统无法区分是自动添加的空格还是字符串末尾的空格,所以进行等值判断时,去除末尾空格进行比对。

varchar(n)

可变长度的字符串,n 值取值范围为 0-65535,如果不设置 n 值则报错。实际存储多少个字符就占多少个位置,每个列所占用的长度根据具体内容变化。

注意:单一的 where id='a'仍旧不能区分存储的内容是 a 还是 a a 空格】,但是 length 函数可以区分字符串的长度。例如 select * from t5 where id='a' and length(id)>1;

char 和 varchar 的区别

1char 属于定长,varchar 属于变长。选择最基本的依据就是定长使用 char,变长使用 varchar

2char 允许的最大长度为 255varchar 允许的最大长度为 65535

3、如果存储的字符串长度变化不大,推荐优先考虑使用 char,例如针对口令进行 md5 加密,固定长度的行不容易产生碎片;对于长度很短的列,char 的性能优于 varchar,是因为 varchar 需要引入额外一个或者两个字节存储字符串长度。

4char 在计算种会自动去除空格;varchar 不会去除空格,但是进行字符串比较时,会去除空格后进行比较;在插入数据时系统会自动去除字符串默认多余的空格。

三、大对象类型 Lob

大对象类型可以分为 2 大类:文本类型和二进制类型。

1BLOB 是一个二进制大对象,可以容纳可变长度的数据,其中分为 tinyblobblobmediumbloblongblob一般用于存储二进制数据,例如声音、图像、视频等。

2Text 是一个文本大对象,可以容纳可变长度的字符串数据,实际上还有一种写法为 clob,其中分为 tinytexttextmediumtextlongtext,一般用于存储文本类型数据,例如小说、商品简介。

两者之间的区别:

1BLOB 是二进制类型,可以容纳可变长度的数据,区分大小写;TEXT是一个不区分大小写的 BLOB。

2TEXT 文本类型,可以存比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用 CHARVARCHAR 来代替。还有 TEXT 类型不用加默认值,加了也没用。而且TEXT BLOB 类型的数据删除后容易导致空洞,使得文件碎片比较多,所以频繁使用的表不建议包含 TEXT 类型字段,建议单独分出去,单独用一个表。

四、日期时间类型

MySQL 有多种表示日期和时间的数据类型,不同的版本可能有所差异,MySQL8 版本支持的日期和时间类型主要有 year 类型、time 类型、date 类型、datetime 类型和 timestamp 类型

1year 通常用来表示年份

2、date 通常用来表示年月日

3time 通常用来表示时分秒

4datetime 通常用来表示年月日时分秒

5 timestamp 通常用来表示带时区的年月日时分秒

五、集合和枚举类型

set 集合类型,可以设置多个集合成员,允许从多个集合成员种选择多个数据进行插入。

enum 枚举类型,可以设置允许选用的多个值,列只能赋予某个枚举成员值。

六、位类型

bit 类型存储的是二进制值。

bit(M)类型,M 为表示二进制的位数,取值范围 1<=M<=64,占用空间大约为(m+7)/8 个字节。如果没有指定 M,默认是 1 位,这个 1 位表示只能存储 1 位的二进制值,这里 M 是表示二进制位数。

总结

1、定义数据类型就是定义列,数据类型决定数据的特性【域完整性】

2、数据类型主要分为字符串类型、定点数和浮点数类型、日期类型、大对象类型【慎用】

3、数据类型在不同的存储引擎上【innodb MyISAM Memory】表现不同。

4、数据所采用的数据类型是根据业务需求和对应的数据类型特征进行选择,不建议使用过于复杂的数据类型。

相关文章:

  • 图解I/O中的零拷贝技术
  • 每日五道java面试题之springMVC篇(三)
  • 【Javaweb】【瑞吉外卖】上传下载实现
  • oppo前端开发一面
  • 搭建一个自己的AI学术语音助手(二)
  • VBA_NZ系列工具NZ02:VBA读取PDF使用说明
  • Android Studio实现内容丰富的安卓校园二手交易平台
  • 搭建mysql主从复制(主主复制)
  • Vue 3中的reactive:响应式状态的全面管理
  • Hystrix的原理及应用:构建微服务容错体系的利器(二)
  • matplotlib-直方图
  • tvm android_rpc_test.py执行报错解决
  • 熔断降级的方案实现
  • php.exe运行时,提示缺少VCRUNTIME140.dll
  • 从混沌到秩序——90年代中国数据库的激烈角逐
  • 学生时期学习资源同步-JavaSE理论知识
  • 机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?
  • 怎么修改游戏ip地址
  • Editor.md-编辑器
  • ChatGPT的核心技术
  • 新疆交通运输厅厅长西尔艾力·外力履新吐鲁番市市长候选人
  • 在地球另一端的交流,架起2万公里间更多共赢的桥梁
  • 中山大学人类学系原系主任冯家骏逝世,享年95岁
  • 中国社科院:网文市场超430亿元,作者破3000万人
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助
  • 印巴战火LIVE丨印巴互相发动无人机袭击,巴官员称两国已在国安层面接触