【MySQL】MySQL数据类型

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 【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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 关系型数据库 MySQL
MySQL数据类型详解及实例应用
MySQL数据类型详解及实例应用
|
存储 关系型数据库 MySQL
MySQL数据库的数据类型、语法和高级查询
MySQL数据库的数据类型、语法和高级查询
220 0
|
SQL 存储 关系型数据库
RDS for MySQL的SQL分类与数据类型
小明需在MySQL中管理商品信息,使用SQL完成业务操作。SQL分为DQL(查询)、DML(增删改)、DDL(定义)、DCL(权限控制)和TCL(事务)五大类。DDL用于创建、修改和删除数据库结构,DML处理数据,DCL控制权限,TCL管理事务,DQL则用于查询数据。MySQL有多种数据类型,如数值型(整数、小数)、日期型和字符串型等,选择合适的数据类型是高效开发的关键。
284 0
|
关系型数据库 MySQL 数据库
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
199 5
|
存储 关系型数据库 MySQL
MySQL支持多种数据类型
MySQL支持多种数据类型
340 4
|
存储 关系型数据库 MySQL
MySQL数据类型
MySQL数据类型
175 3
|
存储 关系型数据库 MySQL
什么是mysql的数据类型?
什么是mysql的数据类型?
200 2
|
存储 关系型数据库 MySQL
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
136 2
|
存储 关系型数据库 MySQL
MySQL 中的 BLOB 数据类型深入解析
【8月更文挑战第31天】
2530 0