当前位置: 首页 > article >正文

MySQL数据库类型——包括数据类型、文本、二进制类型、时间日期、String等,会对数值进行越界测试

1.数据类型分类

2.数值类型

2.1 数值类型(通过tinyint来说明)

        对这个类型进行越界测试,首先创建一个数据库,然后建表。

create database text1;
use text1;
create table t1(num tinyint);

        向text1这个表里插入数据

                

可以看到当数据小于-128时以及数据大于127时插入会失败,并且插入小数会四舍五入为整数

在MySQL里整型可以指定是有符号的或者无符号的,默认是有符号的

可以通过unsigned来说明某个字段是无符号的

案例:

可以看到无符号的数据范围是0到255。

2.2 bit类型

基本语法:

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

案例:我们创建一张表里面有一个id和a类型分别为int和bit(8)

create table tt4 ( id int, a bit(8));

向这张表插入(19,10)

insert into t3 values(19,10);

查看表内的内容

我们发现10并没有显示出来,这是因为bit字段在显示的时候是按ASCLL码对应的值显示的

2.3 小数类型

2.3.1 float

语法:

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

案例:float(4,2)表示的范围是-99.99到99.99,MySQL在保存值时会四舍五入

案例:如果定义的时float(4,2) unsigned这是他的范围时0到99.99

2.3.2 decimal

语法:

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

        decimal的用法和float很像但是区别在于float在保存数据时存在因为精度问题导致数据误差较大。但是decimal并没有这个问题他的精度很大。

2.4 字符串类型

2.4.1 char

语法:

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

注意:MySQL里的一个字符并不是我们在写c++时的那个一个字符1个字节,而是真正的一个字符如:“中”是一个字符,所以MySQL里的字符并不是一个字节

案例:创建一个表包含id和name其中name的类型是char(2)向这个表插入数据

2.4.2 varchar

语法:

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

使用方法和char差不多

下面关于varchar(len)的len到底有多大进行一个说明

1.varchar长度(指字节)可以指定为065535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字 节数是65532

2.当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbkvarchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。

2.4.3 char和varchar比较

如何选择变长或定长字符串

1.如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5

2.如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。

3.定长的磁盘空间比较浪费,但是效率高。

4.变长的磁盘空间比较节省,但是效率低。

5.定长的意义是,直接开辟好对应的空间变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

2.5 日期和时间类型

常用的日期有如下三个: date :日期 'yyyy-mm-dd' ,占用三字节

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

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

四字节

说明:timestamp不需要输入他会根据同一行数据最后被修改的时间来自动更新

案例:创建一个表含义date、datetime、timestamp,插入t1和t2的值观察t3

2.6 enum和set

语法:

enum:枚举,单选类型;

enum('选项1','选项2','选项3',...);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考 虑,这些值实际存储的是“数字,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535 个;当我们添加枚举值时,也可以添加对应的数字编号。

set:集合,多选类型;

set('选项值1','选项值2','选项值3', ...);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率 考虑,这些值实际存储的是“数字,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32.... 最多64个。

你可以理解set实际是一张位图通过1,2,4,...,64这些数来进行位操作

案例: 有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选), (男,女)[单选]

插入数据后查找gender=2的行

对于set类型我们可以用find_in_set函数查找想要的信息

案例:

目前我们有这些数据

查找爱好有武术的人


http://www.kler.cn/a/553055.html

相关文章:

  • Mac OS JAVA_HOME设置
  • Spring Bean 生命周期的执行流程详解
  • Winsows系统中安装docker desktop并搭建深度学习开发环境
  • cluster-smi 命令详解
  • 游戏引擎学习第109天
  • 为AI聊天工具添加一个知识系统 之112 详细设计之53 3*3 记忆矩阵
  • 【R语言】主成分分析与因子分析
  • Ansys 2025 R1 | 以强大数字工程技术增强协作,拓展云计算及AI并赋能数据洞察
  • 【大模型】DeepSeek:AI浪潮中的破局者
  • 【C#】无法安装程序包“DotSpatial.Symbology 4.0.656”
  • Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位
  • 盒马“需要”马云认同
  • 使用python的akshare库读取股票实时数据并保存
  • 【Java】-- 链表的使用及模拟实现
  • 【MySQL】第七弹---深入理解数据库表约束:自增长、唯一键、外键及综合案例解析
  • 51单片机-点亮LED和蜂鸣器
  • java后端开发day17--ArrayList--集合
  • 算法日记20:SC72最小生成树(prim朴素算法)
  • 【AI面板识别】
  • WPF9-数据绑定进阶