【MySQL】数据库中这么多数据类型你真的了解吗?一文看懂不同数据类型有何区别

这篇具有很好参考价值的文章主要介绍了【MySQL】数据库中这么多数据类型你真的了解吗?一文看懂不同数据类型有何区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、常见数据类型

mysql中数值类型的区别,MySQL,数据库,mysql,linux

二、数值类型

mysql中数值类型的区别,MySQL,数据库,mysql,linux

2.1 整型

  1. 创建表t1,将name列数据类型设置为要tinyint
    mysql中数值类型的区别,MySQL,数据库,mysql,linux
  2. 插入属性值:由于这里是tinyint类型,取值范围是【-128–127】,当插入这个范围内的数据显示成功,范围之外失败
    mysql中数值类型的区别,MySQL,数据库,mysql,linux
  3. 使用tinyint unsigned类型创建表t2
    mysql中数值类型的区别,MySQL,数据库,mysql,linux
    无符号类型取值范围【0,255】,这点与C/C++一样

2.1.1 小结

  • MySQL对于数据类型不合法行为采取直接报错,阻止我们继续操作
  • 这也说明了我们插入表里面的数据一定是合法的
  • 在MySQL中,数据类型本身也是一种约束:逼着程序员合法使用,保证数据库中的数据是可预期,完整的
  • 创建表的时候,使用无符号类型需要在后面定义,这点与C/C++不同

其余整型使用方法和约束与tinyint一样

2.2 bit类型

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

  1. 创建表t3
    mysql中数值类型的区别,MySQL,数据库,mysql,linux

  2. 插入数据
    mysql中数值类型的区别,MySQL,数据库,mysql,linux
    可以发现插入2的时候报错,这是因为2无法用1个bit位表示;
    查表发现,gender没有显示任何属性,这是因为bit类型的数据默认以ASCLL码显示,但是ASCLL码0、1不可见,可以通过select id,hex(gender) from t3;进行十进制查看
    mysql中数值类型的区别,MySQL,数据库,mysql,linux

  3. 修改列的属性
    mysql中数值类型的区别,MySQL,数据库,mysql,linux

  4. 修改列的属性
    将gender列bit位改为10位,插入
    mysql中数值类型的区别,MySQL,数据库,mysql,linux
    对比之下可以发现:bit字段在显示时,是按照ASCII码对应的值显示
    mysql中数值类型的区别,MySQL,数据库,mysql,linux

2.3 float 类型

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

这里我创建了一个表t4:要求其salary字段是float类型,并且显示长度为4,小数位数为2
mysql中数值类型的区别,MySQL,数据库,mysql,linux
mysql中数值类型的区别,MySQL,数据库,mysql,linux
无符号测试
这里我在表t4的基础上增加一个字段aneno,并将其设置为无符号float类型
mysql中数值类型的区别,MySQL,数据库,mysql,linux
通过上图可以发现。无符号类型的float,负数是无法插入的

2.4 decimal类型—精度更高

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
decimal使用方法和限制条件与float一样,唯一不同的就是精度方面
mysql中数值类型的区别,MySQL,数据库,mysql,linux
float表示的精度大约是7位
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,
默认是10。(不同平台精度或许不用,仅供参考)

三、字符串类型

3.1 char—固定字符串

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

创建一个表t5将其name字段设置为两个字符,插入英文字符与中文字符实验结果如下
mysql中数值类型的区别,MySQL,数据库,mysql,linux

结论:

  1. char数据类型本身与前面几种一样带有约束(越界报错)
  2. 与C/C++语言中一个字符占一个字节不一样,在GBK中一个汉字占两个字节,UTF-8中一个汉字占三个字节,但是 在mysql中,一个汉字就是一个字符
  3. 由于char固定长度最大为255,建表的时候超过这个数会直接报错

3.2 varchar—变长字符串

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节,在不同编码中,L的最大长度不同,utf-8中最大是是21845

创建表t7,name字段设置为4个字符,使用方法和char一样mysql中数值类型的区别,MySQL,数据库,mysql,linux

  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字
    节数是65532。
  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占
    用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符
    占用2字节)
  • 表的一行也有长度限制如果一行中有其他字段,那么varchar就不能设置为最大值

3.2.1 char和varchar区别

mysql中数值类型的区别,MySQL,数据库,mysql,linux
根据需求,合理选择char/varchar
如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5(密码摘要)
如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。

定长的意义是,直接开辟好对应的空间
变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

3.3 日期和时间类型

常用的日期有如下三个:

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

创建表t8,带有三个字段,分别是日期、日期时间、时间戳;前两个字段需要传入,时间戳不需要
mysql中数值类型的区别,MySQL,数据库,mysql,linux
更新数据或新插入数据,时间戳也会被改变,如下图
mysql中数值类型的区别,MySQL,数据库,mysql,linux
日期时间类型适用于不需要改变时间的场景:上下班打卡
时间戳类型适应于频繁改变时间场景:发帖子

3.4 enum和set

enum:枚举,“单选”类型;enum(‘选项1’,‘选项2’,‘选项3’,…);
set:集合,“多选”类型;set(‘选项值1’,‘选项值2’,‘选项值3’, …);


有一个调查表,需要调查人的喜好, 比如(唱,跳,rap,篮球)中去选择(可以多选),(男,女)[单选]

enum插入可以选择直接用枚举常量,也可以选择常量下标,但是注意,枚举常量下标默认从1开始;对于非枚举常量,mysql直接报错
mysql中数值类型的区别,MySQL,数据库,mysql,linux


set插入特点:可以直接用选项值,也可以用数字,但是插入的数据必须是集合里面的

mysql中数值类型的区别,MySQL,数据库,mysql,linux


使用数字进行插入,结合linux权限理解
mysql中数值类型的区别,MySQL,数据库,mysql,linux


这个数字使用位图来表示的,比如以上爱好中全选对应的位图结构就是1111(15)
mysql中数值类型的区别,MySQL,数据库,mysql,linux

3.4.1 set查询----find_in_set

find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0;
str_list 用逗号分隔的字符串。


绝对查询:结果是只含有特定字段的信息,如:select * from t9 where hobby='唱';
mysql中数值类型的区别,MySQL,数据库,mysql,linux

查询包含有特定字段的的信息
mysql中数值类型的区别,MySQL,数据库,mysql,linux文章来源地址https://www.toymoban.com/news/detail-544787.html

到了这里,关于【MySQL】数据库中这么多数据类型你真的了解吗?一文看懂不同数据类型有何区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【⑬MySQL】· 一文了解数据类型(一)

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL数据类型简介 | 整数 | 浮点 | 定点 | 时间/日期类型的分享 ✨ 0.数据类型简介 数据类型(data_type)是指系统中所允许的数据的类型。MySQL 数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。 数据库中的每个列都

    2024年02月11日
    浏览(36)
  • 一文了解数据库,数据仓库,数据湖,数据集市,数据湖仓

    目录 一、定义 1. 数据库(Database) 2. 数据仓库(Data Warehouse) 3. 数据湖(Data Lake) 4. 数据集市(Data Mart) 5. 数据湖仓(Data Lakehouse) 二、相同、异同 2.1 相同点 2.2 不同点 三、常见的工具 数据库: 数据仓库: 数据湖: 数据集市: 数据湖仓: 当然,以下是关于数据库、数

    2024年01月17日
    浏览(49)
  • 一文了解数据库vs数据仓库vs数据湖

    大家好,我是KD,一名10年以上大数据架构研发经验从业者,目前主要从事云原生大数据方向设计,擅长云原生技术、数据架构、数据平台构建、大数据组件性能调优 以下是本文目录: 什么是数据库? 为什么会有数据仓库? 拆解几个OLAP核心概念 大数据技术架构演进过程 什

    2024年01月23日
    浏览(58)
  • 【MySQL】数据库数据类型

    看起来分为很多类型,例如数值类型,有一些看一眼就懂啦,所以不会全部介绍 进入 test_db数据库中,并创建表t1 ,其内部包含 tinyint类型的num 输入 desc t1; 查看t1表结构 tinyint类型为一个字节,有符号,所以 取值范围为 -128 到 127 向t1 表中分别插入 -128 、128 、1 输入 select * fr

    2024年02月08日
    浏览(45)
  • MySQL数据库的数据类型和基于MySQL数据类型的综合实例项目

    数值型数据类型主要用来存储数字。MySQL的整数类型如下所示 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、 BIGINT。 类型名称 说明 存储需求 TINYINT 很小的整数 1字节 SMALLINT 小的整数 2字节 MEDIUMINT 中等大小的整数 3字节 INT 普通大小的整数 4字节 BIGINT 大整数 8字节 创建表tmp1,其中字段

    2023年04月08日
    浏览(46)
  • 【MySQL】数据库的数据类型

    mysql 中的数据类型分类如下,其中红色字体的为常用的类型: mysql 中表的建立属性列: 列名称 数据类型 ,例如 num int ,它与我们平时写的语言数据类型是倒过来的! 接下来我们创建一个只有 tinyint 类型的表,然后分别插入 1 和 128,会发现 128 插入失败,因为越界插入了,

    2024年02月04日
    浏览(46)
  • mysql数据库常见数据类型

    数据类型: MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。 INT是INTEGER的同义词,DEC是DECIMAL的同义词。 BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、Inn

    2024年02月15日
    浏览(53)
  • mysql数据库的数据类型 -- 4

    目录 数据类型 4.1:数据类型的分类 4.2:数值类型 4.3:字符类型 4.5:enum和set类型 4.1:数据类型的分类 数值类型 描述 TINYINT [UNSIGNED] 整数,占用1字节 SMALLINT [UNSIGNED]  整数,占用2字节 INT [UNSIGNED]  整数,占用4字节 BIGINT [UNSIGNED] 整数,占用8字节 FLOAT [(M, D)] [UNSIGNED] 单精度浮

    2024年02月04日
    浏览(38)
  • 【Mysql】数据库第二讲(数据库中数据类型的介绍)

    数值越界测试: 说明: 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的 无符号案例: 注意 注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将

    2024年02月09日
    浏览(49)
  • MySQL数据库基础:JSON函数各类操作一文详解

    很多日常业务场景都会用到json文件作为数据存储起来,而mysql5.7以上就提供了存储json的支撑。往常存储json一般都保留在pg库或者是hive库里面,现在mysql有了支持的话基本业务都可以用mysql来实现。现在mysql8.x版本对json字符出处理已经做的非常完善了。现在就让我们来详细了解

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包