MySQL数据类型(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据类型

一、数据类型初识

决定了存储数据时应该开辟的空间大小

决定了如何识别一个特定的二进制序列

决定了数据的取值范围

59ccc9b259d64d8b99ef967f7069d8cd.png


注意:MySQL本身是不支持bool类型的,当把一个数据设置成bool类型时,数据库会自动将其转换成tinyint(1)的数据类型,其实这个就是变相的bool类型,因为tinyint(1)只有1和0两种取值,可以分别对应bool类型的true和false


二、数值类型

2.1 tinyint类型

有符号tinyint范围测试


创建一个表,表当中包含一个tinyint类型的列,默认其为有符号类型


ae32eedf978247b6a9b03325a351677e.png


由于tinyint类型占用1字节,因此有符号tinyint的取值范围为-128~127,插入该范围内的数据时都能成功插入


4f40ad2fd7f14cd2b3a94fa9dee91f7e.png


若插入的数据不在-128~127范围内,那么就会发生报错


5566bd29670a4425b34204eba4af7d2a.png


无符号tinyint范围测试


创建一个表,表当中包含一个tinyint类型的列,并指定其为无符号类型

bfe3896c731345d8b982d8611b5ebe06.png



由于tinyint类型占用1字节,因此无符号tinyint的取值范围为0~255,插入该范围的数据时都能成功插入


3225c24d48214638b889a404e36877b7.png


若插入的数据不在0~255范围内,那么就会发生报错


355c24c12ebb49b9b031cb60f56bb79f.png


除非场景要求数值类型必须是无符号,否则尽量不要使用无符号,因为有符号的数值类型存不下的数据,其对应的无符号类型同样可能存不下,这时应直接将数值类型提升


2.2 bit类型

bit类型的显示方式


创建一个表,表中包含一个int类型的id列和一个8位bit类型的data列

f9328a56060a49848b4b6dddaae358d3.png



表中插入一条记录,记录中指定id和data的值均为10,插入记录后查看表会发现data的值显示的并不是10


eff86672de354d799301fcb509b8da90.png


根本原因是因为bit类型在显示时,是按照ASCII码对应的值进行显示的,而在ASCII码表中10对应的是控制字符LF,表示换行的意思。若向表中插入记录时指定id和data的值均为65,由于ASCII码表中65对应的是字符A,因此插入记录后查看表就会发现data的值显示的是A


a105e06169804679b9b93ad47f9c9c1f.png


bit类型的范围测试


创建一个表,表中包含用户名name和用户性别gender,其中gender的类型可以指定为1位bit类型,因为性别只有男和女两种取值,使用1个bit位来表示用户性别可以节省空间



a40068920fec43fa8a7e24a3f43b2aac.png

若规定gender列插入0表示男,插入1表示女,那么在插入用户信息时就可通过插入0和1来指定用户的性别


b575e11828954aceb1021ae862868ecc.png


若插入gender列的数据不是0或1,那么插入数据时就会发生报错


2fe18221fb79467a915dbda43b6bd83d.png


虽然MySQL提供了位类型bit,但不建议将数据类型设置成位类型,除非将来这个数据本身就只给程序看,并且数据本身非常占用资源

因为查询位类型数据时,默认会按照ASCII码对应的值进行显示,这对于数据库管理员维护数据库或程序员调试程序都不太方便

2.3 float类型

有符号float范围测试


创建一个表,表中包含一个float(4,2)类型的列,默认其为有符号类型


283ceee69ee74d72a6388220a5dff0ef.png


由于float(4,2)的取值范围为-99.99~99.99,因此插入该范围内的数据都能成功插入



a905423d03a74831967abab37ab0465f.png

由于MySQL在保存值时会进行四舍五入,因此实际可插入float(4,2)的范围为-99.994~99.994,若插入的数据不在该范围内,那么插入数据时就会报错


cab80ba601744d428f851957bedd5660.png


无符号float范围测试


创建一个表,表中包含一个float(4,2)类型的列,并指定其为无符号类型


db5d80840ed945afbc21fcb0f5f22be0.png


无符号float类型的取值范围,实际就是把对应有符号float类型中的负数部分拿走了,因此float(4,2)的取值范围为0~99.99,实际可插入的范围是0~99.994

307628ec64c34468941e698f598e46e3.png



2.4 decimal类型

decimal的精度更高


decimal和float类型的使用方式相同,但decimal的精度比float更高。创建一个表,表中分别包含一个float(10,8)的列和一个decimal(10,8)的列


67a53cd63cc246d2ad0eed65a11f99f2.png


向表中插入一条记录,指定float和decimal的值均为23.12345612,但最终查表时会发现decimal保持了数据的原貌,而float则会存在一定的精度损失


51bed9cf7c81401da62f97ecc7c7bf59.png

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
关系型数据库 MySQL 存储
【MySQL】——数据类型及字符集
【MySQL】——数据类型及字符集
170 0
【MySQL】——数据类型及字符集
|
2天前
|
机器学习/深度学习 存储 关系型数据库
MySQL数据库:常用数据类型
【2月更文挑战第7天】
35 0
|
2天前
|
SQL 关系型数据库 MySQL
学习MySQL,创建表,数据类型
学习MySQL,创建表,数据类型
|
2天前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
114 1
|
2天前
|
存储 SQL 关系型数据库
MySql中有哪些数据类型(数据库学习——三)
MySql中有哪些数据类型(数据库学习——三)
40 1
|
2天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
2天前
|
SQL 存储 关系型数据库
【MySQL-6】DDL的表结构的数据类型盘点&案例演示
【MySQL-6】DDL的表结构的数据类型盘点&案例演示
|
2天前
|
存储 SQL 关系型数据库
【mysql】mysql中的数据类型知多少?
【mysql】mysql中的数据类型知多少?
|
2天前
|
关系型数据库 MySQL
MySQL基础(二:常用数据类型及MySQL创建过程实例)
MySQL基础(二:常用数据类型及MySQL创建过程实例)
MySQL基础(二:常用数据类型及MySQL创建过程实例)
|
2天前
|
存储 缓存 关系型数据库
【Mysql】Schema与数据类型优化
【Mysql】Schema与数据类型优化
16 0

推荐镜像

更多