【MySQL】数据类型

文章目录
  • [1. 数据类型分类](#1. 数据类型分类)
  • [2. 数值类型](#2. 数值类型)
    • [2.1 整型](#2.1 整型)
    • [2.2 位类型](#2.2 位类型)
    • [2.3 小数](#2.3 小数)
    • [2.4 bool](#2.4 bool)
  • [3. 字符串类型](#3. 字符串类型)
    • [3.1 字符](#3.1 字符)
    • [3.2 日期与时间](#3.2 日期与时间)
    • [3.3 enum 和set](#3.3 enum 和set)

1. 数据类型分类

2. 数值类型

2.1 整型

  1. tinyint

注意:unsigned 放在类型的后面

  1. smallint

mediumint、int、bigint依次类推。

2.2 位类型

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

有了bit类型的值,只存放0或1,这时可以定义bit(1),可以节省空间。

2.3 小数

  1. float

语法:

复制代码
float[(m, d)] [unsigned] : m指定显示长度,d指定小数位数

占用4个字节空间

  • 小数点后的位数如果少于指定位数,
    • 总位数不符合,则插入失败
    • 总位数符合,插入成功
  • 小数点后的位数如果大于指定位数
    • 四舍五入后符合,插入成功
    • 四舍五入后不符合,插入失败

如果定义的是float(4,2) unsigned ,因为把它指定为无符号的数,范围是 0 ~ 99.99

double类型比float精度更大,占用8字节

  1. decimal

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

decimal(5,2) 表示的范围是 -999.99 ~ 999.99

decimal(5,2) unsigned 表示的范围 0 ~ 999.99

decimal和float很像,但是有区别:二者表示的精度不一样

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

2.4 bool

3. 字符串类型

3.1 字符

  1. char

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

最大长度值可以为255

  1. varchar

    varchar(L): 可变长度字符串,L表示字符长度

L表示最多可存放多少个字符,最大长度65535个字节

说明:

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据真实大小,所以说有效字节数是65532。

当表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf8中,一个字符占用3个字节],

如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

char VS varchar

如何选择定长或变长字符串?

  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号
  • 如果数据长度有变化,就使用变长(varchar),比如:名字,地址,但是你要保证最长的能存的进去。
  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。
  • 定长的意义是,直接开辟好对应的空间
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少

3.2 日期与时间

常用的日期有如下三个:

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

3.3 enum 和set

  1. enum

语法:

  • enum:枚举,"单选"类型;

    enum('选项1','选项2','选项3',...);

  • 该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;

  • 而且出于效率考虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。

  1. set
  • set:集合,"多选"类型;

    set('选项值1','选项值2','选项值3', ...);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,...最多64个。


如果我要查找hobby是跑步的,应该怎么查呢?

不能查询出所有爱好为跑步的人

需要使用集合查询使用find_ in_ set函数

  • find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0;
  • str_list 用逗号分隔的字符串。
相关推荐
xmjd msup22 分钟前
mysql的分区表
数据库·mysql
Lyyaoo.22 分钟前
【JAVA Spring面经】Spring 事务失效情况
java·数据库·spring
MeAT ITEM27 分钟前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dovens31 分钟前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
IOT.FIVE.NO.131 分钟前
claude code desktop cowork报错解决和记录Workspace..The isolated Linux environment ...
linux·服务器·数据库
molihuan35 分钟前
最新 将 MuPDF 编译到 Android 动态库 PDF解析渲染引擎
android·pdf
Rick199340 分钟前
mysql 慢查询怎么快速定位
android·数据库·mysql
科技小花8 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56619 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全10 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库