【MySQL】MySQL数据类型

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 【MySQL】MySQL数据类型

7d0e1a6917204ee7846a0067942b52ef.png

数值类型

dd4a45f034ac4ed39f74acf55e71a538.png

注: mysql不区分大小写

当定义数据类型后 ,插入的 数据需要遵循数据类型的约束。

创建一个有符号的数据类型 :

create table t1 (num int );

创建一个无符号的数据类型:

create table t2 (num int unsigned);

在添加数据时,如果超出数据类型所允许的范围,mysql服务会拦截命令语句。

bit 类型

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

create table tt4 ( id int, a bit(8));
insert into tt4 values(10, 10);

查看表,我们发现,a的数据10没有出现。

再次插入,

insert into tt4 values(65,65);

查看

发现a位置的65 变为了 ‘A’,我们可知:

bit字段在显示时,是按照ASCII码对应的值显示

同时,bit类型插入数值时也受其本身大小约束。

小数类型

float

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

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

操作:

 create table t2(id int,num float(4,2));
 insert into t2 values(1,99.99);
 insert into t2(id,num) values(2,-99.99);
 insert into t2 values(2,99.994);

看:

插入99.996 等数字时,ERROR 1264 (22003): Out of range value ,mysql会约束你。

decimal

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

deciaml 和float 很像,但是有区别,它们的精度不一样。

decimal的精度更准确,因此如果我们希望某个数据表示高精度,选择decimal

字符串类型

char

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

注意: char的单位是字符,不是字节,一个字符可以表示任意一个在字符集里的字符,

一个汉字和一个英文字母都表示为一个字符

char(2) 表示可以存放两个字符。

varchar

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

varchar的L表示的是字节数。所以,varchar的最大长度和编码字符集有关系。

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

但是,我们看报错:

row size too large,说明65535字节是表一行的最大长度,因此受表中定义的其它数据影响,达不到其最大长度。

varchar 的可变体现在,当设置了L长度后,插入的数据占据内存的大小等于数据的实际大小而不是你设置的规定的L,而char插入的大小就是设置的大小;

日期和时间类型

date :日期 ‘yyyy-mm-dd’ ,占用三字节

datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss’表示范围从 1000 到 9999 ,占用八字节

timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和 datetime 完全一致,占用 四字节

data 和datatime 都是固定的。

添加数据时,时间戳(timestamp)自动添加当前时间,修改数据时,时间戳也会自动修改为当前时间。

enum和set

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

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

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”, 值依次对应如下数字:1,2,3,…

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

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

create table t5(
    -> name varchar(20),
    -> sex enum('男','女'),
    -> hobby set('学习','游戏','爬山','代码','恋爱')
    -> );

创建表结构,

正常插入 :

insert into t5 values('张三','男','学习');
insert into t5 values('李四','女','游戏');
insert into t5 values('王五','男','游戏,爬山');

数字插入:

insert into t5 values('赵六',2,0);
insert into t5 values('赵六',2,1);
insert into t5 values('赵六',2,2);
insert into t5 values('赵六',1,4);
insert into t5 values('赵六',1,7);
insert into t5 values('赵六',1,31);


可知,enum的下标从1开始,一一对应。

set的数字表示的是一个位图结构,当为0时,插入为空,当为31时,二进制表示为11111,所以选的是位图的前五个选项。

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

查上表中爱好有学习的人的信息:

select * from t5 where find_in_set('学习',hobby);

查表中爱好只有学习的人:

select * from t5 where hobby='学习';


563c747f2530482b886528d7afbd25e2.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库的数据类型、语法和高级查询
MySQL数据库的数据类型、语法和高级查询
46 0
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据类型详解及实例应用
MySQL数据类型详解及实例应用
104 4
|
3月前
|
SQL 存储 关系型数据库
RDS for MySQL的SQL分类与数据类型
小明需在MySQL中管理商品信息,使用SQL完成业务操作。SQL分为DQL(查询)、DML(增删改)、DDL(定义)、DCL(权限控制)和TCL(事务)五大类。DDL用于创建、修改和删除数据库结构,DML处理数据,DCL控制权限,TCL管理事务,DQL则用于查询数据。MySQL有多种数据类型,如数值型(整数、小数)、日期型和字符串型等,选择合适的数据类型是高效开发的关键。
43 0
|
1天前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
8 2
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
131 0
|
30天前
|
存储 SQL 关系型数据库
MySQL设计规约问题之存储状态、性别等信息时,应该使用哪种数据类型
MySQL设计规约问题之存储状态、性别等信息时,应该使用哪种数据类型
|
2月前
|
SQL 存储 关系型数据库
MySQL数据库案例实战教程:数据类型、语法与高级查询详解
MySQL数据库案例实战教程:数据类型、语法与高级查询详解
48 3
|
2月前
|
关系型数据库 MySQL
|
2月前
|
存储 JSON 关系型数据库
Mysql都有哪些数据类型?
Mysql都有哪些数据类型?
25 0
|
2月前
|
存储 Java 关系型数据库
数据类型的取值范围以及Java和Mysql数据库的类型对照--强调时间类型的转换(jdk1.8)
数据类型的取值范围以及Java和Mysql数据库的类型对照--强调时间类型的转换(jdk1.8)
28 0