Mysql8.0 数据类型介绍

1,数值类型

1.1 整数类型

TINYINT:微整数,1字节

SMALLINT:小整数,2字节

MEDIUMINT:中等整数,3字节

INT:整数,4字节

BIGINT:大整数,8字节

如果添加UNSIGNED,表示无符号整数。

1.2 浮点数和定点数类型

FLOAT:4字节

DOUBLE:8字节

DECIMAL:M+2字节 DECIMAL(M,D)定义,默认为DECIMAL(10, 0)

DECIMAL以字符串的形式存放,对精度要求比较高(如货币,科学数据等)的时候,使用该类型比较好。

1.3 位类型

BIT(M):M的范围1-64,不写默认为1。

MySQL 8.0版本中默认以“0X”开头的十六进制形式显示,可以通过BIN()函数显示为二进制格式。

mysql> create table tb_bit(-> num1 BIT,-> num2 BIT(5)-> );
Query OK, 0 rows affected (2.21 sec)mysql> DESC tb_bit;
+-------+--------+------+-----+---------+-------+
| Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| num1  | bit(1) | YES  |     | NULL    |       |
| num2  | bit(5) | YES  |     | NULL    |       |
+-------+--------+------+-----+---------+-------+
2 rows in set (0.00 sec)mysql> insert into tb_bit values(1, 1);
Query OK, 1 row affected (0.20 sec)mysql> select * from tb_bit;
+------------+------------+
| num1       | num2       |
+------------+------------+
| 0x01       | 0x01       |
+------------+------------+
1 row in set (0.00 sec)

看到,默认查出来的是16进制。

mysql> insert into tb_bit values(0, 17);
Query OK, 1 row affected (0.18 sec)mysql> select * from tb_bit;
+------------+------------+
| num1       | num2       |
+------------+------------+
| 0x01       | 0x01       |
| 0x00       | 0x11       |
+------------+------------+
2 rows in set (0.00 sec)

其中0x11表示17。

如果要展示二进制的形式,使用BIN函数。

mysql> select BIN(num1), BIN(num2) from tb_bit;
+-----------+-----------+
| BIN(num1) | BIN(num2) |
+-----------+-----------+
| 1         | 1         |
| 0         | 10001     |
+-----------+-----------+
2 rows in set (0.00 sec)

2,日期类型

YEAR:年份,1字节。格式为YYYY,取值范围1901-2155

DATE:日期,3字节。格式为YYYY-MM-DD,取值范围1000-01-01至9999-12-31

TIME:时间,3字节。格式为HH:MM:SS,取值范围-838:59:59至838:59:59

DATETIME:日期时间,8字节。格式为YYYY-MM-DD HH:MM:SS,取值范围1000-01-01 00:00:00 至 9999-12-31 23:59:59

TIMESTAMP:时间戳,4字节。格式为YYYY-MM-DD HH:MM:SS,取值范围1970-01-01 00:00:01 UTC 至 2038-01-19 03:14:07 UTC

mysql> create table tb_date(-> d1 DATE,-> d2 TIME,-> d3 DATETIME,-> d4 TIMESTAMP-> );
Query OK, 0 rows affected (2.98 sec)mysql> DESC tb_date;
+-------+-----------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-------+
| d1    | date      | YES  |     | NULL    |       |
| d2    | time      | YES  |     | NULL    |       |
| d3    | datetime  | YES  |     | NULL    |       |
| d4    | timestamp | YES  |     | NULL    |       |
+-------+-----------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> insert into tb_date values('2023-2-28','21:21:12','2023-2-28 21:21:12', '2023-2-28 21:21:12');
Query OK, 1 row affected (0.18 sec)mysql> select * from tb_date;
+------------+----------+---------------------+---------------------+
| d1         | d2       | d3                  | d4                  |
+------------+----------+---------------------+---------------------+
| 2023-02-28 | 21:21:12 | 2023-02-28 21:21:12 | 2023-02-28 21:21:12 |
+------------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

插入日期,时间的分隔符不限于"-",也可以是“%”,“#”等。甚至可以不要符号,类似20230208这样。

mysql> insert into tb_date values('2023%2%28','21:21:12','2023@2@28 21:21:12', '2023#2#28 21:21:12');
Query OK, 1 row affected, 3 warnings (0.35 sec)mysql> select * from tb_date;
+------------+----------+---------------------+---------------------+
| d1         | d2       | d3                  | d4                  |
+------------+----------+---------------------+---------------------+
| 2023-02-28 | 21:21:12 | 2023-02-28 21:21:12 | 2023-02-28 21:21:12 |
| 2023-02-28 | 21:21:12 | 2023-02-28 21:21:12 | 2023-02-28 21:21:12 |
+------------+----------+---------------------+---------------------+
2 rows in set (0.00 sec)

DATETIME与TIMESTAMP的区别:

TIMESTAMP的取值范围小,并且TIMESTAMP类型的日期时间在存储时会将当前时区的日期时间值转换为时间标准时间值,检索时再转换回当前时区的日期时间值。

而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。

3,字符串类型

3.1 文本字符串类型

CHAR(M):固定长度,M省略默认为1。

VARCHAR(M):可变长度,M不能省略。

TINYTEXT:小文本

TEXT:文本

MEDIUMTEXT:中等文本

LONGTEXT:大文本

ENUM:枚举,从预定义的字符串列表中选择一个成员。

SET:集合,从预定义的字符串列表中选择任意个成员。

3.2 二进制字符串类型

BINARY(M):固定长度,M省略默认为1。

VARBINARY(M):可变长度,M不能省略。

TINYBLOB:小BLOB

BLOB:BLOB

MEDIUMBLOB:中等BLOB

LONGBLOB:大BLOB

BLOB类型与TEXT类型的区别如下

(1)BLOB类型存储的是二进制字符串,TEXT类型存储的是文本字符串。BLOB类型还可以存储图片和声音等二进制数据。
(2)BLOB类型没有字符集,并且排序和比较基于列值字节的数值,TEXT类型有一个字符集,并且根据字符集对值进行排序和比较。

3.3 ENUM和SET类型

无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。比如性别只有“男”或“女”;上下班交通方式可以有“地铁”“公交”“出租车”“自行车”“步行”等。枚举和集合类型字段声明的语法格式如下。

字段名 ENUM('值1', '值2',  ... '值N')

字段名 SET('值1', '值2',  ... '值N')

mysql> create table tb_enum_set(-> gender ENUM('男','女'),-> transport SET('地铁','公交','汽车')-> );
Query OK, 0 rows affected (2.30 sec)mysql> desc tb_enum_set;
+-----------+---------------------------+------+-----+---------+-------+
| Field     | Type                      | Null | Key | Default | Extra |
+-----------+---------------------------+------+-----+---------+-------+
| gender    | enum('男','女')           | YES  |     | NULL    |       |
| transport | set('地铁','公交','汽车') | YES  |     | NULL    |       |
+-----------+---------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)mysql> insert into tb_enum_set values('男','公交,汽车');
Query OK, 1 row affected (0.21 sec)mysql> insert into tb_enum_set values('男','公交,火车');
ERROR 1265 (01000): Data truncated for column 'transport' at row 1
mysql> select * from tb_enum_set;
+--------+-----------+
| gender | transport |
+--------+-----------+
| 男     | 公交,汽车 |
+--------+-----------+
1 row in set (0.00 sec)

insert into tb_enum_set values('男','公交,火车');

可以看到,insert的时候,值必须是创建表的时候预定义的成员,输入其他的会报错。

4,空间类型

MySQL空间类型扩展支持地理特征的生成、存储和分析。这里的地理特征表示世界上具有位置的任何东西,可以是一个实体,例如一座山;可以是空间,例如一座办公楼;也可以是一个可定义的位置,例如一个十字路口等。MySQL中使用Geometry(几何)来表示所有地理特征。Geometry指一个点或点的集合,代表世界上任何具有位置的事物。

简单了解下,后续专门写一篇介绍。

5,JSON类型

在MySQL 5.7之前,如果需要在数据库中存储JSON数据只能使用VARCHAR或TEXT字符串类型。从MySQL 5.7.8之后开始支持JSON数据类型,和原来JSON格式的字符串相比,JSON类型有以下的优点。

• 自动验证。错误的JSON格式会报错。
• 存储格式优化。数据保存为二进制格式,文件存储很紧凑,读取速度快。
• 可以通过键名或数组索引查询和修改对应的值,不用把整个字符串都读出来。

mysql> create table tb_json(-> j JSON);
Query OK, 0 rows affected (1.06 sec)mysql> desc tb_json;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| j     | json | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)mysql> insert into tb_json values('{"k1":"v1", "k2":"v2"}');
Query OK, 1 row affected (0.18 sec)mysql> select * from tb_json;
+--------------------------+
| j                        |
+--------------------------+
| {"k1": "v1", "k2": "v2"} |
+--------------------------+
1 row in set (0.00 sec)

在MySQL中字符串、日期类型通常使用单引号,JSON类型的数据也用单引号,那么JSON串中的字符串就需要使用双引号。

mysql> insert into tb_json values('["abcd", 123, null, true, false]');
Query OK, 1 row affected (0.35 sec)mysql> select * from tb_json;
+----------------------------------+
| j                                |
+----------------------------------+
| {"k1": "v1", "k2": "v2"}         |
| ["abcd", 123, null, true, false] |
+----------------------------------+
2 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯备战刷题three(自用)

1.合法日期 #include <iostream> #include <map> #include <string> using namespace std; int main() {map<string,int>mp;int days[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i<12;i){for(int j1;j<days[i];j){string sto_strin…

江苏双线服务器租用的优势有哪些?

随着互联网的快速发展&#xff0c;服务器也随着科技的发展变得多种多样&#xff0c;其中双线服务器租用格外受大家关注&#xff0c;那么江苏双线服务器租用到底有哪些优势呢&#xff1f; 1.网络环境稳定 江苏双线服务器租用的主要优点就是有着高速稳定的网络环境&#xff0c;双…

P4198 楼房重建题解(线段树, 分治)

题目描述 题面 简要题意&#xff1a; 给你一个长度为 n n n 的序列 a i a_i ai​ ( n ≤ 1 0 5 n \leq 10^5 n≤105)&#xff0c;要求进行 m m m 次操作 ( m ≤ 1 0 5 m \leq 10^5 m≤105) 。操作分两种&#xff1a; 1.单点修改。 2.查询整个序列中有多少个位置 x x x 满…

动态规划(背包理论)-算法题

416. 分割等和子集 题目 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, …

Vivado Vitis 2023.2 环境配置 Git TCL工程管理 MicroBlaze和HLS点灯测试

文章目录 本篇概要Vivado Vitis 环境搭建Vivado 免费标准版 vs 企业版Vivado Windows 安装Vivado 安装更新 Vivado 工程操作GUI 创建工程打开已有工程从已有工程创建, 重命名工程GUI导出TCL, TCL复原工程TCL命令 Vivado 版本控制BlinkTcl脚本新建导出重建工程纯Verilog BlinkTc…

js处理IOS虚拟键盘弹出后输入框被遮住

​ JS IOS 前言 在项目开发的过程中&#xff0c;在IOS手机端系统下&#xff0c;当对输入框&#xff08;input/textarea&#xff09;进行focus操作时&#xff0c;键盘弹起遮住输入框。 问题描述 从页面底部focus输入框失败从页面中间focus输入框失败 原因 造成上述问题的&…

【MySQL】_自连接与子查询

目录 1. 自连接 2. 子查询&#xff08;嵌套查询&#xff09; 2.1 子查询分类 2.2 单行子查询示例1&#xff1a;查询不想毕业同学的同班同学 2.3 多行子查询示例2&#xff1a;查询语文或英语课程的信息成绩 3. 合并查询 3.1 示例1&#xff1a;查询id3或者名字为英文的课程…

Flutter 处理异步操作并根据异步操作状态动态构建界面的方法FutureBuilder

概述 当界面的内容需要依靠网络请求的数据&#xff0c;就需要处理苦恼的&#xff0c;状态是空&#xff0c;非空的逻辑了&#xff0c;不然页面构建可能会报错&#xff0c;而FutureBuilder提供了一个非常好的解决方法&#xff0c;直接看代码 代码 异步操作函数 即网络请求函数…

[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解

一、分析判断 进入靶机&#xff0c;主页面如图&#xff1a; 主页面提供给我们一条关键信息&#xff1a; flag值在 表flag 中的 flag列 中。 接着我们尝试输入不同的id&#xff0c;情况分别如图&#xff1a; 当id1时&#xff1a; 当id2时&#xff1a; 当id3时&#xff1a; 我…

YOLOv8改进涨点,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)

目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说&#xff0c;巨大的模型很难达到实时检测的要求。而且&#xff0c;由大量深度可分离卷积层构…

【Redis | 第三篇】Springboot整合Redis

文章目录 3.Springboot整合Redis3.1Spring Data Redis介绍3.2整合步骤3.2.1导入依赖3.2.2配置redis数据源3.2.3使用RedisTemplate进行操作&#xff08;1&#xff09;创建RedisTemplate Bean&#xff08;2&#xff09;注入RedisTemplate&#xff08;3&#xff09;执行Redis操作&…

C++:常量表达式

C11开始constexpr作为一种声明&#xff0c;为编译器提供了在编译期间确认结果的优化建议&#xff0c;满足部分编译期特性的需求 constexpr和const区别 int b10; const int ab; //运行成功 constexpr int cb; //编译器报错&#xff0c;b的值在编译期间不能确定 const int size1…

面试笔记系列二之java基础+集合知识点整理及常见面试题

目录 Java面向对象有哪些特征&#xff0c;如何应用 Java基本数据类型及所占字节 Java中重写和重载有哪些区别 jdk1.8的新特性有哪些 内部类 1. 成员内部类&#xff08;Member Inner Class&#xff09;&#xff1a; 2. 静态内部类&#xff08;Static Nested Class&#…

Vue 组件和插件:探索细节与差异

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

Linux查看进程占用句柄

ps -ef |grep python # 查找工具执行PID python pid 11287lsof -p 11287 |wc -l 查看进程占用句柄设置句柄上限IOError: [Errno 24] Too many open files:解决方法

阿里云短信验证笔记

1.了解阿里云的权限操作 进入AccessKey管理 选择子用户 创建用户组和用户 先创建用户组&#xff0c;建好再进行权限分配 添加短信管理权限 创建用户 创建好后的id和密码在此处下载可以得到 2.开通阿里云短信服务 进行申请&#xff0c;配置短信模板 阿里云短信API文档 短信服务…

逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例

补充知识&#xff1a;进行AES解密需要知道四个关键字&#xff0c;即密钥key,向量iv,模式mode,填充方式pad 一般网页AES都是16位的&#xff0c;m3u8视频加密一般是AES-128格式 网页链接:https://www.jinglingshuju.com/articles 进行抓包结果返回的是密文&#xff1a; 一般思…

性能测试-jvm

1、jps&#xff1a; 查看java进程 [rootVM-100-3-centos ~]# jps 7088 Jps 1521 ruoyi-admin.jar 3978 sys_perf_01-0.0.1-SNAPSHOT.jar [rootVM-100-3-centos ~]# 2、jmap&#xff1a; 查看java内存 [rootVM-100-3-centos ~]# jmap -heap 3978 Attaching to process ID 39…

【算法大家庭】分治算法

目录 &#x1f953;1.简单介绍 &#x1f9c8;2.汉诺塔问题 1.简单介绍 分治算法是解决问题的一种思想&#xff0c;它将一个大问题分解成若干个小问题&#xff0c;然后分别解决这些小问题&#xff0c;最后将小问题的解合并起来得到原问题的解。 分解&#xff1a;将原问题分解…

我的创作纪念日(直接跳过)

机缘 转眼已经工作多年了&#xff0c;在工作中收获了很多&#xff0c;也成长了很多。仔细写的话也不是几句话能概括完整的。 收获 时常记录一些心得或者是步骤&#xff0c;分享踩过的坑。有些时候同样的操作自己还会回来看看&#xff0c;说明还是有不少用处。 日常 随心&…