我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【MySQL】数据库数据类型

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【MySQL】数据库数据类型

文章目录

1. 整体概要

看起来分为很多类型,例如数值类型,有一些看一眼就懂啦,所以不会全部介绍

2. 数值类型

(有符号) tinyint 创建表

进入 test_db数据库中,并创建表t1 ,其内部包含 tinyint类型的num


输入 desc t1; 查看t1表结构

tinyint类型为一个字节,有符号,所以取值范围为 -128 到 127


向t1 表中分别插入 -128 、128 、1


输入 select * from t1; 查询 t1 表的结构


由于 -129 和128 超过了 tinyint类型的取值范围,所以插入失败


(无符号) tinyint 创建表

再次创建表,内部包含一个无符号的 tinyint类型的num
所以取值范围为 0 到255


输入 desc t2; 查询t2表的结构


由于取值范围是 0 到255
所以向t2表插入 0 100 255 ,可以插入成功
而向t2表插入 -1,则会插入失败

bit类型

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

先进入 test_db 数据库中,创建一张 t3表
内部包含 int类型的id 、 1字节的online
id 表示 用户某一个身份id
online 表示 当前用户是否登录 (1表示登录 0表示没有登录)


插入 (123 ,0 ) 表示123号用户不在线
插入 (124 ,1 ) 表示 124号用户在线
可当插入 (123,5)时 ,由于 online 的类型为1个比特位,所以只能插入0或者1,所以会报错


输入 select * from t3; 即查看t3表的结构
发现online 对应的位置 什么都看不到
是因为通常以ASCII值形式显示的,而ASCII值在当前是不可显示的


让 online 以十进制方案显示出来
这样就可以看到 0 或者 1


创建表时,bit范围是1到64,而当前设置是65,所以创建表不成功 会报错

float 类型

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


创建一张表t5,包含 int类型的id 以及 float类型的salary,并且salary共有4位,其中2位是小数
id 表示 这个人的身份
salary 表示 这个人的工资
float [ (4,2) ] 的取值范围是 -99.99 和 99.99


向t5表插入 (1,99.99) 和(1,-99.99) ,是可以插入成功的
(float的取值范围是有符号区分的)


若slary为23.46,则插入成功,并且显示为23.46


若slary为23.467,则插入成功,并且显示为23.47 ,因为四舍五入,将其进位


若slary为23.464,则插入成功,并且显示为23.46,因为四舍五入,将其舍去

所以进行浮点数存储时,若要求是2位精度,而传入更多位的精度,mysql就会采用 四舍五入的方式 将数据进行存储


(无符号)float

mysql支持定义符号的浮点数

float [ (4,2) ] 的取值范围为 0 到 99.99

创建一张表t6,内部包含 一个bigint类型的id 以及 无符号的浮点数类型的salary,并且salary共有4位,其中2位是小数


若插入 一个99.999,正常来说小数末尾是9 是要四舍五入的,但是进位 就会超过99.99的取值范围 ,所以会报错


decimal

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

decimal(5,2) 的取值范围是 -999.99 - 999.99
decimal(5,2)unsigned的取值范围是 0 - 999.99
decimal和float很像,但是有区别:
float 和 decimal 表示的精度不一样


创建一张表 t7 ,内部包含 float类型的f1,f1总长度为10 ,其中小数部分为8
以及decimal 类型的f2,f2总长度为4,其中小数部分为2


当插入 99.99 在decimal的取值范围内时,则插入成功
当插入99.999不在decimal的取值范围内时,则插入失败


将属于t7表的 decimal类型的f2 的精度 改为 总长度为10 ,其中小数部分为8


在t7表中的成员 f1和f2中分别插入 23.12345612

输入 select *from t7; 查看t7表的信息 发现 f1是精度方面的问题

float在精度过大时,会进行优化策略
但decimal不会这样,decimal可以完全保证数据的精度

3. 二进制类型

char类型

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


在test_db数据库中,创建一张表t8 ,内部包含 int类型的id 以及 char类型的name


输入 desc t8; 查看t8表中更详细信息
t8表中的name 最多储存2个字符


向t8表中插入 一个字符’a’ 或者插入两个字符’ab’ 时,就可以插入成功
向t8表中插入三个字符’abc’时,就会报错


MySQL中的字符代表一种符号,一个汉字代表一个字符

当插入1个字符 中 和2个字符 中国 时,是可以插入成功的
但当插入 3个字符 中国人时 ,因为最多储存2个字符,所以会报错


varchar类型

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


创建一张表t9,内部包含int类型的id 和 varchar类型的name,最多储存6个字符
并默认字符集为uft8


每一个汉字都可以看做是一个字符
若输入 1个字符 中, 3个字符中国人 都可以插入成功
若输入 7个字符时,就会报错


想要修改 t9表中的name成员的varchar类型 最多储存65536个字符
但是报错显示 最多 为21845 个字符 ,可明明varchar 最大长度为65535个字节

MysQL在存储varchar类型时,是按照utf8编码的
在uft8编码中,一个英文字符等于1个字节,一个中文等于3个字节
假设以中文计算,21845个字符 乘以3 就为 65535 个字节


char为固定长度字符串,类似于c++中的数组
如:char(6) 就表示数组字符个数为6个字符,可能只用了1个字符空间,但是依旧会给6个字符空间

varchar为变长字符串
varchar(len) len定义多大就表示字符空间的上限
如:varchar(6) 可能只用了1个字符空间,就只会分配保存一个字符空间


varchar的字节长度在0 -65535之间 ,需要有1-3个字节用于记录数据的大小
(传入数据的大小不同,有可能数据小 1个字节就能记录,有可能数据太大,就需要3个字节才能记录)
假设有3个字节记录数据,所以有效字节数为65532

当表的编码为utf8时,varchar(len) 的参数 len最大值为 65532/3=218844
(一个字符占用3个字节为例)
所以最大字符个数为 21844


创建一张表t10,内部包含 varchar类型的name ,其最多储存21845个字符
因为超过了21844范围,所以会报错


当表中 name的varchar类型的取值为21844时,就可以创建成功


4. 日期时间

日期时间类型

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


创建一张表 t10 ,内部包含 date类型的t1 ,datetime类型的t2,timestamp类型的 t3


输入 desc t10; 查看t10表的更多详细信息
t3的类型为时间戳,默认值为 CURRENT_TIMESTAMP
扩展说明:创建表结构时,向表中插入数据,timestamp会自动更新
而date与datetime 需要外部插入


向t10表中的成员 date类型的t1 和 datetime类型的t2 分别插入 2001-10-02 和2002-10-03 08:00:00

输入 select * from t10; 查看t10表的更详细的信息
发现t3自动更新为当前时间


当输入 update t10 set t1=‘2003-10-04’; 更新t10表中t1的时间
发现t3所表示的时间戳 也会跟着变化

5. string 类型

enum类型和set类型

enum:枚举
enum(‘选项1’,‘选项2’,‘选项3’);
提供若干个选项的值,最终一个单元格中,实际只存储其中一个值
如:问卷调查 性别 只能选男或者女


set :集合
set(‘选项1’,‘选项2’,‘选项3’);
提供若干个选项的值,最终一个单元格中,可存储任意多个值
如:问卷调查 爱好 可以选打羽毛球 乒乓球 篮球等


创建一张表 votes,其中包含 最多存储30字节的名字 、 性别 、 爱好
同时 性别 只能从男或者女中 选择一个
而爱好 可以从 代码 篮球 游泳中 选择一个或者多个


向votes表中插入 姓名为 张三 性别为 男 爱 好为代码


当性别中 插入 0 和3 是不可以的,可插入 1 和 2 是可以的


输入 select * from votes 时,发现 1对应性别男 2对应性别女

所以使用枚举类型,可以使用对应的枚举常量
也可以使用枚举常量对应的下标 (从1开始 分别代表第一个枚举值 依次往后推)


向votes表中插入 姓名 为赵六 、性别为男、 爱好为 代码、篮球、游泳
(不允许插入不存在的爱好,同时也可以选择插入一个爱好或者多个爱好)


enum类型 与 set类型 允许为空

只插入 名字,性别与爱好会显示为NULL
NULL表示什么都没有


’ ’ 表示有东西,但是 为空串

若set类型 对应的爱好 插入 0 ,则显示为空串
若set类型 对应的爱好 插入 1 ,则显示为第一个设置的值 ,依次类推


若set类型 对应的爱好 插入 2,则显示为第二个设置的值
若set类型 对应的爱好 插入 3 ,则显示为第一个设置的值 和第二个设置的值


因为共有3个爱好,所以设置3个比特位 000
从右到左,依次为从低到高
若表示代码,则为 001
若表示篮球,则为 010
若表示代码和篮球,则为011
若表示游泳,则为 100


enum类型和set类型的查找

在枚举中的查找

输入 select * from votes where gender=‘男’;
挑选出votes表中所有男生的信息


输入 select * from votes where gender=‘女’;
挑选出votes表中所有女生的信息


在set中的查找

输入 select * from votes where hobby=‘游泳’;
挑选出votes表中爱好只有游泳的人
有的人爱好是广泛的,其中就包含游泳,但是筛选并不显示


所以需要借助 mysql的筛选函数 —— find_in_set 函数

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


输入 select * frin votes where find_in_set(‘游泳’,hobby);
在votes表 的 hobby 查找所有爱好有游泳 的人


and相当于 C语言的逻辑与
在votes表 的 hobby 查找所有爱好有游泳 以及 爱好有篮球的人

来源地址:https://blog.csdn.net/qq_62939852/article/details/133964008

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【MySQL】数据库数据类型

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【MySQL】数据库的数据类型

数据类型 一、数据类型分类二、数值类型1. tinyint2. bit3. 小数类型(1)float(2)decimal 三、字符串类型1. char2. varchar3. varchar 和 char 比较 四、日
【MySQL】数据库的数据类型
2023-12-23

MySQL 数据库中的数据类型

整数类型标准 SQL 中支持 INTEGER 和 SMALLINT 这两种类型,MySQL 数据库除了支持这两种类型以外,还扩展支持了 TINYINT、MEDIUMINT 和 BIGINT整数类型字节数无符号数的取值范围有符号数的取值范围TINYINT1(0,
MySQL 数据库中的数据类型
2020-06-26

MySQL数据库常见的数据类型

MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型 。1,整数类型:整数类型的数,默认情况下既可以表示正整数又可以表示负整数(此时称为有符号数)。如果只希望表示零和正
MySQL数据库常见的数据类型
2020-08-20

MySQL数据库:注释及数据类型

注释# 单行注释-- 单行注释(注意:两个但横线后面必须加空格)数据类型1.整形​ tinyint、smallint、mediumint、int、bigint​ 小整数值 大整数值 大整数值 大整数值 极大整数值2.浮点型​ float、d
2015-03-21

MySQL数据库~~~~初识、基础数据类型

一 数据库初识1.1 什么是数据库数据库(DataBase,简称DB),简而言之可视为电子化的文件柜----存储电子文件的处所,用户可以对文件中的数据运行新增,截取,更新,删除等操作. 所谓数据库是以一定方式储存在一起,能予多个用户 共享,具有尽可能小的冗余度
2022-04-19

MySQL数据库的数据类型decimal详解

在MySQL数据库中,decimal数据类型用于存储精确的小数值。它比其他浮点类型(如float和double)更适合用于存储货币金额、利率等需要精确计算的数据。decimal数据类型的语法如下:DECIMAL(M, D)其中,M是总的数字
2023-09-14

数据库学习之六:mysql数据类型

六、mysql数据类型1、课程大纲• 数据类型介绍• 数据类型设置• 列属性• 数据类型的字符集用法• 选择适当的数据类型2、数据类型介绍• 四种主要类别:数值类型字符类型时间类型二进制类型• 数据类型的 ABC 要素:Appropriate(适当)Brief
数据库学习之六:mysql数据类型
2016-06-23

mysql的数据库数据类型有哪些

MySQL数据库中常用的数据类型包括:整数类型:INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT浮点数类型:FLOAT、DOUBLE、DECIMAL字符串类型:CHAR、VARCHAR、TEXT、BLOB日期
mysql的数据库数据类型有哪些
2024-05-08

MySQL数据类型 - JSON数据类型 (4)

JSON值的比较和排序JSON值可以使用=,=,,!=,和运算符进行比较。JSON值尚不支持以下比较运算符和函数:●BETWEEN●IN()●GREATEST()●LEAST()要想使用上面这些列出的比较运算符和函数,一个解决方法是将JSON值转换为原生MyS

	MySQL数据类型 - JSON数据类型 (4)
2016-08-23

MySQL数据类型 - JSON数据类型 (2)

JSON值的规范化、合并和自动包装当一个字符串被解析并发现是一个有效的JSON文档时,它也会被规范化。这意味着,具有与稍后在文档中找到的键(从左到右)重复的键的成员将被丢弃。JSON_OBJECT()调用生成的对象值只包含第二个key1元素,因为该键名在之前值

	MySQL数据类型 - JSON数据类型 (2)
2019-09-03

MySQL数据类型 - JSON数据类型 (3)

最右边的数组元素。MySQL支持last关键字,作为数组中最后一个元素的索引的同义词。last - N 形式的表达式可用于相对寻址和范围定义,如下所示:如果不是针对数组计算路径,则求值结果与将该值包装在单个元素数组中的结果相同:可以使用带有JSON列标识符和J

	MySQL数据类型 - JSON数据类型 (3)
2021-03-13

MySQL数据类型 - 数据类型默认值

数据类型默认值数据类型规范可以有显式或隐式的默认值。数据类型规范中的DEFAULT值子句显式指示列的默认值。示例:SERIAL DEFAULT VALUE是一种特殊情况。在整数列的定义中,它是NOT NULL AUTO_INCREMENT UNIQUE的别名。

	MySQL数据类型 - 数据类型默认值
2021-04-15

mysql数据库是什么类型

mysql 是一款开源、跨平台的关系型数据库管理系统 (rdbms)。它提供以下主要特性:开源:免费供任何人使用和修改。跨平台:可在各种操作系统上运行。高性能:快速处理大量数据。可靠性:确保数据完整性和可用性。可扩展性:轻松扩展以满足数据和
mysql数据库是什么类型
2024-04-14

编程热搜

目录