广告
返回顶部
首页 > 资讯 > 数据库 >【MySQL】MySQL数据类型
  • 725
分享到

【MySQL】MySQL数据类型

mysqlandroid 2023-08-22 23:08:09 725人浏览 泡泡鱼
摘要

文章目录 一、数据类型的分类二、tinyint类型2.1 创建有符号数值2.2 创建无符号数值 三、bit类型三、浮点类型3.1 float3.2 decimal类型 四、字符串类型4.1 char类型4.2 varchar

一、数据类型的分类

在这里插入图片描述

  • 数值类型

在这里插入图片描述

二、tinyint类型

2.1 创建有符号数值

默认是有符号的。取值范围[-128,127]:

Mysql> create table if not exists t1(    -> num tinyint    -> );

在这里插入图片描述
插入tinyint类型数值范围内的数据是可以的:

mysql> insert into t1 values (-128);Query OK, 1 row affected (0.01 sec)mysql> insert into t1 values (127);Query OK, 1 row affected (0.01 sec)

在这里插入图片描述
超出范围的数据会插入失败:

mysql> insert into t1 values (128);ERROR 1264 (22003): Out of range value for column 'num' at row 1mysql> insert into t1 values (-129);ERROR 1264 (22003): Out of range value for column 'num' at row 1

2.2 创建无符号数值

用tinyint unsigned数据类型创建表t2:

mysql> create table if not exists t2( num tinyint unsigned );Query OK, 0 rows affected (0.02 sec)

我们知道tinyint unsigned类型的范围是【0 ~ 255】:

mysql> insert into t2 values (0);Query OK, 1 row affected (0.01 sec)mysql> insert into t2 values (255);Query OK, 1 row affected (0.00 sec)mysql> insert into t2 values (-1);ERROR 1264 (22003): Out of range value for column 'num' at row 1mysql> insert into t2 values (256);ERROR 1264 (22003): Out of range value for column 'num' at row 1

如果我们向MySQL特定的类型中插入不合法的数据,MySQL一般都是直接拦截,不让我们做对应的操作!
反过来,我们如果已经有数据被插入到MySql中了,那么一定是合法的
所以数据类型本身就是一种约束

MySql表中建立属性列:列名称 类型在后

num tinyint unsigned;

三、bit类型

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

mysql> create table if not exists t3(     -> num1 bit(1),    -> num2 bit(64)    -> );Query OK, 0 rows affected (0.03 sec)

对于num1只能插入0或1。

mysql> insert into t3 (num1, num2) values (1, 256);Query OK, 1 row affected (0.01 sec)mysql> insert into t3 (num1, num2) values (0, 1024);Query OK, 1 row affected (0.01 sec)

位类型显示的是ASCII码,如果想看到:可以使用十六进制打印。

select hex(num1),hex(num2) from t3;

验证一下:
如果插入’a’或者97:

mysql> insert into t3 (num1, num2) values(1, 97);Query OK, 1 row affected (0.01 sec)mysql> insert into t3 (num1, num2) values(1, 'a');Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
所以bit字段在显示时,是按照ASCII码对应的值显示。

三、浮点类型

3.1 float

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

例如:
float(5,2) 表示的范围是 -999.99 ~ 999.99
float(5,2) unsigned 表示的范围 0 ~ 999.99

创建表:

mysql> create table if not exists t5(    -> num float(4, 3)    -> );Query OK, 0 rows affected (0.04 sec)

插入数据:

mysql> insert into t5 (num) values (9.999);Query OK, 1 row affected (0.00 sec)mysql> insert into t5 values (-9.999);Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
插入的如果是 1.2345,会变成1.234(超过5进1)

mysql> insert into t5 values (1.2345);Query OK, 1 row affected (0.01 sec)mysql> insert into t5 values (1.2346);Query OK, 1 row affected (0.01 sec)

在这里插入图片描述

但是如果进位以后超过范围了就也无法插入成功。

mysql> insert into t5 values (9.9996);ERROR 1264 (22003): Out of range value for column 'num' at row 1

如果是无符号浮点数就不能插入负数了,上限不变。

3.2 decimal类型

decimal(m, d) [unsigned] : M指定显示的总长度(整数+小数),d指定小数位数。

decimal和float很像,表示的数据范围一样,但是精度不一样

创建表:

mysql> create table t7(    -> num1 float(10, 8),    -> num2 decimal(10, 8)    -> );Query OK, 0 rows affected (0.03 sec)

插入数据:

mysql> insert into t7 (num1, num2) values (10.0, 99.99);Query OK, 1 row affected (0.01 sec)mysql> insert into t7 (num1, num2) values (23.12345612, 23.12345612);Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
可以看到float类型存在精度丢失,decimal存什么就是什么。(精度高)

float在精度过大会做一些动作,而decimal不会。
float表示的精度大约是7位。decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。

建议:如果希望小数的精度高,推荐使用decimal或double而不是float。

四、字符串类型

4.1 char类型

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

创建表:

mysql> create table t6(    -> num char(2)    -> );Query OK, 0 rows affected (0.06 sec)

插入数据:

mysql> insert into t6 values ('a');Query OK, 1 row affected (0.00 sec)mysql> insert into t6 values ('ab');Query OK, 1 row affected (0.00 sec)mysql> insert into t6 values ('abc');ERROR 1406 (22001): Data too long for column 'num' at row 1

如果插入汉字:对于gbk编码一个占用2个字节,utf8编码一个汉字占用3个字节

mysql> insert into t6 values ('哈');Query OK, 1 row affected (0.00 sec)mysql> insert into t6 values ('哈哈');Query OK, 1 row affected (0.00 sec)mysql> insert into t6 values ('哈哈哈');ERROR 1406 (22001): Data too long for column 'num' at row 1

mysql的字符代表的是符号,所以能够插入成功。

在这里插入图片描述

4.2 varchar类型

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

关于varchar(L),L到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。(如果表中仅有一个varchar字段,有效字节数是65532,如果还有其他的字段,那么varchar的实际有效字节将会比65532低一点)
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

创建表:

mysql> create table t4(    -> id int,    -> name varchar(6)    -> );Query OK, 0 rows affected (0.03 sec)

插入数据跟char类型是一样的。

char和varchar的区别:

char是固定长度字符串,类似C/C++中的数组的概念,例如char(6)表示开辟6个字符的大小的空间,没用完就是浪费。
varchar是可变长度的字符串,例如varchar(6)表示最大长度为6个字符,如果用户仅使用了一个字符,那么varchar只会分配出一个字符的空间+额外1个字节(记录数据大小)用于存储。

五、日期和时间类型

常用的日期有如下三个:

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

创建表:

mysql> create table t8(    -> t1 date,    -> t2 datetime,    -> t3 timestamp    -> );Query OK, 0 rows affected (0.04 sec)

在这里插入图片描述
对于时间戳timestamp:创建表结构,插入数据是tinmestamp会自动更新。所以不需要更改

mysql> insert into t8 (t1, t2) values ('2002-07-31', '2023-07-31 08:00:00');Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
此时更新t1:

mysql> update t8 set t1='2003-07-31';Query OK, 1 row affected (0.01 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from t8;+------------+---------------------+---------------------+| t1         | t2                  | t3                  |+------------+---------------------+---------------------+| 2003-07-31 | 2023-07-31 08:00:00 | 2023-08-03 17:17:45 |+------------+---------------------+---------------------+1 row in set (0.00 sec)

t1和t3都会被更新,这也说明了时间戳timestamp会自动更新,意义在于记住时间的更新。

六、枚举和集合类型

6.1 enum的枚举值和set的位图结构

创建带有enum和set类型的表votes:

mysql> create table if not exists votes(    -> username varchar(10),    -> gander enum('男', '女'),    -> hobby set('篮球', '足球', '跑步')    -> );

插入数据:

mysql> insert into votes values ('张三', '男', '跑步');Query OK, 1 row affected (0.01 sec)mysql> insert into votes values ('李四', '女', '篮球');Query OK, 1 row affected (0.01 sec)mysql> insert into votes values ('赵五', 'a', '篮球');ERROR 1265 (01000): Data truncated for column 'gander' at row 1

可以看到对于gander我们只能插入男或者女,不能插入其他字符。
但是可以插入1和2,也就是说枚举类型可以写常量也可以写常量的下标。

对于set也可输入数字插入,数字代表位图:

mysql> insert into votes values ('赵五', '男', '羽毛球');ERROR 1265 (01000): Data truncated for column 'hobby' at row 1mysql> insert into votes values ('赵五', '男', '跑步,篮球')Query OK, 1 row affected (0.01 sec)mysql> insert into votes values ('赵五', '男', '跑步,篮球,足球');Query OK, 1 row affected (0.01 sec)

在这里插入图片描述

mysql> insert into votes (username) values ('小明');Query OK, 1 row affected (0.02 sec)mysql> insert into votes values ('小明', 1, 0);Query OK, 1 row affected (0.00 sec)mysql> insert into votes values ('小明', 1, 1);Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
NULL表示什么都没有,而' '表示有东西但是是一个空串。

当然set是一个位图结构,如果是3,那么就是1 | 2(篮球,足球)。

enum:在所有枚举中选择一种进行插入。也可以直接使用枚举值,枚举值从1开始。
set:在集合中选择一种或多种存在的选项进行数据的插入。也可使用位图的形式进行数据插入。

6.2 查询集合find_in_set

如果我们想要查询爱好是篮球的:

mysql> select * from votes where hobby='篮球';+----------+--------+--------+| username | gander | hobby  |+----------+--------+--------+| 李四     || 篮球   || 小明     || 篮球   |+----------+--------+--------+2 rows in set (0.00 sec)

可以看到是精确筛选
下面介绍一个函数find_in_set

mysql> select find_in_set('a', 'a,b,c');+---------------------------+| find_in_set('a', 'a,b,c') |+---------------------------+|                         1 |+---------------------------+1 row in set (0.00 sec)

这里的1表示true,说明’a’在集合’a,b,c’中。

这里只能查找一个元素是否在对应的集合中。

mysql> select find_in_set('d', 'a,b,c');+---------------------------+| find_in_set('d', 'a,b,c') |+---------------------------+|                         0 |+---------------------------+1 row in set (0.00 sec)mysql> select find_in_set('a,b', 'a,b,c');+-----------------------------+| find_in_set('a,b', 'a,b,c') |+-----------------------------+|                           0 |+-----------------------------+1 row in set (0.00 sec)

当一个要查找的字段位于集合中时,find_in_set函数会返回其下标(非0),反之返回0。所以我们就可以在集合中筛选出爱好带有“篮球”的人。

mysql> select * from votes where find_in_set ('篮球', hobby);+----------+--------+----------------------+| username | gander | hobby                |+----------+--------+----------------------+| 李四     || 篮球                 || 赵五     || 篮球,跑步            || 赵五     || 篮球,足球,跑步       || 小明     || 篮球                 || 小明     || 篮球,足球            |+----------+--------+----------------------+5 rows in set (0.00 sec)

也可以在集合中筛选出爱好既有“篮球”,又有“足球”人。使用and逻辑与进行筛选:

mysql> select * from votes where find_in_set ('篮球', hobby) and find_in_set('足球', hobby); +----------+--------+----------------------+| username | gander | hobby                |+----------+--------+----------------------+| 赵五     || 篮球,足球,跑步       || 小明     || 篮球,足球            |+----------+--------+----------------------+2 rows in set (0.00 sec)

来源地址:https://blog.csdn.net/qq_66314292/article/details/132069075

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL】MySQL数据类型

本文链接: https://www.lsjlt.com/news/378102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 【MySQL】MySQL数据类型
    文章目录 一、数据类型的分类二、tinyint类型2.1 创建有符号数值2.2 创建无符号数值 三、bit类型三、浮点类型3.1 float3.2 decimal类型 四、字符串类型4.1 char类型4.2 varchar...
    99+
    2023-08-22
    mysql android
  • 【MySQL】MySQL 数据类型
    目录 1. tinyint 类型 2. bit 类型 3. 小数类型 1、float 类型 2、decimal 类型 3. 字符串类型 1、char 类型  2、varchar 类型 4. 日期类型 5. enum和set 1、枚举和集合类...
    99+
    2023-09-07
    mysql 数据库
  • MySQL 数据类型
      1、数值型 类型                     范围、小数位数 TINYINT (-128,127) SMALLINT 正负3w+ MEDIUMINT 正负800w+ INT 正负21亿+ B...
    99+
    2018-12-08
    MySQL 数据类型
  • mysql数据类型
    1.整型(整数类型) create table t2(id int(5) unsigned zerofill); 注意:   ①int后面的5表示的是显示宽度(就是你select * from t2;时看到的数字最大长度...
    99+
    2020-10-18
    mysql数据类型
  • MySQL 数据类型
    MySQL 数据类型MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型MySQL支持所有标准SQL数值数据类...
    99+
    2022-10-18
  • 【MySQL】数据类型
    前言 在前一篇文章中,我们介绍了数据库的基本操作,而在插入表时涉及了许多关于表的数据类型,接下来就一起来学习一下MySQL常见的一些文件类型吧。 整形类型 数据类型字节最小值最大值TINYINT1-1...
    99+
    2023-09-24
    mysql
  • MySQL数据类型 - JSON数据类型 (2)
    JSON值的规范化、合并和自动包装 当一个字符串被解析并发现是一个有效的JSON文档时,它也会被规范化。这意味着,具有与稍后在文档中找到的键(从左到右)重复的键的成员将被丢弃。JSON_OBJECT()调用生成的对象值只包含第二个key1元...
    99+
    2019-09-03
    MySQL数据类型 - JSON数据类型 (2) 数据库入门 数据库基础教程 数据库 mysql
  • MySQL数据类型 - JSON数据类型 (3)
    最右边的数组元素。MySQL支持last关键字,作为数组中最后一个元素的索引的同义词。last - N 形式的表达式可用于相对寻址和范围定义,如下所示: 如果不是针对数组计算路径,则求值结果与将该值包装在单个元素数组中的结果相同: 可以使...
    99+
    2021-03-13
    MySQL数据类型 - JSON数据类型 (3) 数据库入门 数据库基础教程 数据库 mysql
  • MySQL数据类型 - JSON数据类型 (4)
    JSON值的比较和排序 JSON值可以使用=,=,,!=,和运算符进行比较。 JSON值尚不支持以下比较运算符和函数: ●BETWEEN ●IN() ●GREATEST() ●LEAST() 要想使用上面这些列出的比较运算符和函数,一个解决...
    99+
    2016-08-23
    MySQL数据类型 - JSON数据类型 (4) 数据库入门 数据库基础教程 数据库 mysql
  • MySQL数据类型 - 数据类型默认值
    数据类型默认值 数据类型规范可以有显式或隐式的默认值。 数据类型规范中的DEFAULT值子句显式指示列的默认值。示例: SERIAL DEFAULT VALUE是一种特殊情况。在整数列的定义中,它是NOT NULL AUTO_INCREM...
    99+
    2021-04-15
    MySQL数据类型 - 数据类型默认值 数据库入门 数据库基础教程 数据库 mysql
  • MySQL数据类型对应Java数据类型
    ### 数值类型 - TINYINT:大小(1byte),范围(有符号为-128到127,无符号为0到255),用于小整数值,对应于java中的Byte类型; - SMALLINT:大小(2byte),范围(有符号为-32768到3276...
    99+
    2023-09-07
    mysql java 数据库
  • MYSQL的数据类型
    基本数据类型: 整数(int),小数(double),固定长度字符(char),可变长度字符(varchar),文本(text),二进制大对象(blog)...
    99+
    2016-03-05
    MYSQL的数据类型
  • MySQL数据类型(精)
    数据类型(精) MySQL中的数据类型 整型类型 类型介绍 可选属性 M 显示宽度不会影响类型的实际宽度 设置字段f1,f2,f3 f1 INT, f2 INT(5), f3 INT(5) ZEROFILL#不足宽度时,会自动...
    99+
    2021-02-11
    MySQL数据类型(精)
  • 【MySQL】数据库数据类型
    文章目录 1. 整体概要2. 数值类型(有符号) tinyint 创建表(无符号) tinyint 创建表bit类型float 类型(无符号)floatdecimal 3. 二进制类型ch...
    99+
    2023-10-23
    数据库 mysql
  • MySQL数据类型--------整数类型实战
    1. 背景 * MySQL支持SQL标准整数类型整数(或INT)和SMALLINT。作为标准的扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT2.  整数类...
    99+
    2022-10-18
  • MySQL数据类型enum 枚举类型
    例如: 性别 gender 男 女 保密 基本语法: enum(数据值 1,数据值 2...); 数据值列表在 255 个以内,使用 1 个字节来存储数据值列表超过 255,但是小于...
    99+
    2022-11-13
  • java保存json类型数据到mysql数据库,mysql保存json类型数据
    1.首先在对应表添加一个json类型字段 2.在java对应的实体类添加对应的字段,重点是加上(typeHandler = JacksonTypeHandler.class)这个注解 不然的话保存...
    99+
    2023-09-04
    java mysql 数据库
  • MySQL 数据类型详情
    目录1、数值类型1.1、数值类型分类1.1.1、浮点数1.1.2、位类型1.1.3、时间日期类型1.1.4、字符串类型1.1.5、ENUM 类型1.1.6、SET类型1、数值类型 1...
    99+
    2022-11-12
  • 【mysql】—— 数据类型详解
    序言: 本期我将大家认识关于 mysql 数据库中的基本数据类型的学习。通过本篇文章,我相信大家对mysql 数据类型的理解都会更加深刻。 目录 (一)数据类型分类 (二)数值类型 1、tinyint类型 2、bit类型 3、小数类型 ...
    99+
    2023-08-31
    mysql 数据库
  • 03、MySql的数据类型
      MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 1、数字类型   类型大小范围(有符号)范围(无符号)用途 TINYINT ...
    99+
    2021-08-14
    03 MySql的数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作