【Hello mysql】 mysql数据类型(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【Hello mysql】 mysql数据类型(下)

字符串类型

char

语法

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

案例(char)

我们创建一张表 其中姓名属性规定为两个字符

接着我们开始插入数据

我们发现当我们插入两个字母的时候可以插入 当我们插入三个字母的时候sql就报错了

当我们插入两个中文的时候可以插入 当我们插入三个中文的时候sql就报错了

此外char类型的最大长度为255

字符的含义

很奇怪的一点是 在我们之前学习C/C++阶段 我们知道一个字母所占的字节数和中文所占的字节数是不同的 那么在mysql中为什么将一个字母等同于一个中文呢

实际上不管是字母和汉字 在mysql中都将它们看作是一个字符 跟所占的字节数和大小都没有关系

在我下面的博客内容中会出现字符和字节两个词语 大家一定不要混淆!

varchar

语法

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

实际上varchar的用法和char类型也是一模一样的 不同的是varchar的储存大小还有它们的存储方式

varchar类型的存储大小

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

char和varchar存储方式的比较

在上图中我们可以很明显的看到 在制定相同的字符大小时 存储不同的数据 char和varchar所占用的字节数是不一样的

char所占用的字节数恒为指定数 而varchar则遵循一个算法实时计算

如何选择变长和定长字符

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

时间和日期类型

常用的日期有下面三个

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

之后我们插入一组时间数据

我们可以发现t1 t2的数据就是我们所插入的数据 而t3的数据就是现在的实时时间

如果我们更改t1的时间

如上图 t3的时间也会被修改 而t2的时间不受影响

enum和set

enunm

语法:

enum:枚举,“单选”类型;

enum(‘选项1’,‘选项2’,‘选项3’,…);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考

虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535

个;当我们添加枚举值时,也可以添加对应的数字编号。

实例

比如说我们建立一张表 表中有枚举类型的数据性别

当我们像表中插入数据的时候可以选择性别为男或者女如果填写其他则会报错

而枚举的数据在实际的存储中是按照数字存储的并且是从1开始

所以说1代表男 2代表女 输入其他数字则插入失败

set

语法

set:集合,“多选”类型;

set(‘选项值1’,‘选项值2’,‘选项值3’, …);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率

考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…

最多64个。

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

set的数字表示使用的是二进制的形式 如下图

1代表有这个爱好 而0代表没有这个爱好 上图中的111就代表有这三个爱好 而111的二进制数字转化为十进制后是7

实例

我们在上面的表中加入一个爱好选项

插入数据的时候就可以使用数字或者是文字插入爱好了

如何查询爱好

  1. 我们可以通过等于号查询

但是我们这里发现使用等于号查询只能查询出爱好中只有游泳的人而不能查询出爱好中有游泳的人

于是这里就有第二种查询方式

  1. 集合查询使用find_ in_ set函数:

语法:

find_in_set(sub,str_list)

参数说明:

  • sub为我们要查询的字符串
  • str_list为我们要查询的列表 一般为属性名

此时我们要查询爱好中带有游泳的人就可以这么查询了

总结

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
46 5
|
3月前
|
存储 关系型数据库 MySQL
MySQL支持多种数据类型
MySQL支持多种数据类型
155 3
|
3月前
|
存储 关系型数据库 MySQL
什么是mysql的数据类型?
什么是mysql的数据类型?
57 2
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据类型
MySQL数据类型
64 2
|
5月前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
41 2
|
5月前
|
存储 关系型数据库 MySQL
MySQL 中的 BLOB 数据类型深入解析
【8月更文挑战第31天】
629 0
|
5月前
|
存储 关系型数据库 MySQL
|
5月前
|
存储 XML 关系型数据库
深入理解MySQL中的BLOB和TEXT数据类型
【8月更文挑战第31天】
794 0
|
5月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
582 0
|
6月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之存储状态、性别等信息时,应该使用哪种数据类型
MySQL设计规约问题之存储状态、性别等信息时,应该使用哪种数据类型