MySQL--数据类型--0409

news2025/1/19 11:35:48

目录

1.数值类型

1.2 tinyint类型

2.bit类型

3.小数类型

3.1 float

3.2 decimal

 4.字符类型

4.1 char

4.2 varchar

4.3 char 和 varchar 比较

5. 日期类型

6. enum 和 set

6.2 set和enum的查找

6.2.1 enum的查找

6.2.2 set的查找


1.数值类型

1.2 tinyint类型

只能表示 -128~127的数字,超过不会发生截断而是直接报错。

如果带上 unsigned 可以表示0~255的数字

mysql> create table tt1(num tinyint);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into tt1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into tt1 values(128);
ERROR 1264 (22003): Out of range value for column 'num' at row 1

2.bit类型

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

相当于设置了一个m位的位图

  • bit字段在显示的时候,是按照ASCII码对应的值显示的。比如
mysql> insert into tt4 values(10, 10);
Query OK, 1 row affected (0.00 sec)

mysql> insert into tt4 values(65, 65);
Query OK, 1 row affected (0.01 sec)

mysql> insert into tt4 values(66, 66);
Query OK, 1 row affected (0.00 sec)

mysql> insert into tt4 values(70, 70);
Query OK, 1 row affected (0.00 sec)

mysql> insert into tt4 values(97, 97);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt4;
+------+------+
| id   | a    |
+------+------+
|   10 | 
    |
|   65 | A    |
|   66 | B    |
|   70 | F    |
|   97 | a    |
+------+------+
5 rows in set (0.00 sec)
  • 如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。

3.小数类型

3.1 float

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

mysql> create table float_t( id int, salary float(6,2));

 在有些版本中也可以插入诸如 9999.990 这样的数字,MySQL只会四舍,不会五入。

3.2 decimal

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

mysql> create table t1 ( id int, salary float(10,8), salary2 decimal(10,8));

decimal和float很像,但是float和decimal表示的精度不一样。

如果希望小数的精度高,推荐使用decimal

 4.字符类型

4.1 char

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

mysql> create table tt9(id int, name char(2));

注意MySQL中的字符,可以是'a' 'b' '1' '2' 这样的,也可以是一个汉字。

4.2 varchar

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

 用法和char一模一样

至于为什么是变长的,是因为varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。

编码是utf8时,varchar(n)的参数n最大值是65532/3=21844

因为utf中,一个字符占用3个字节

如果编码是gbk,varchar(n)的参数n最大是65532/2=32766

因为gbk中,一个字符占用2字节。

4.3 char 和 varchar 比较

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

5. 日期类型

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

其中 timestamp 在插入时不需要手动的写。它会根据最后 插入/修改 数据的时间自行修改。

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

mysql> insert into time1 (t1,t2) values('1949-10-1','2023-04-15 15:28:59');
Query OK, 1 row affected (0.01 sec)

mysql> select * from time1;
+------------+---------------------+---------------------+
| t1         | t2                  | t3                  |
+------------+---------------------+---------------------+
| 1949-10-01 | 2023-04-15 15:28:59 | 2023-04-15 15:29:13 |
+------------+---------------------+---------------------+
1 row in set (0.00 sec)

6. enum 和 set

enum——从所给选项中单选。

set——从所给选项中多选。

这两个类型对插入时的约束更强,只能插入创建时所给的内容的一部分。这里既可以是以''形式插入,也可以是比特位插入。

gender enum('男','女'); 那么代表0001 ->1 为男,0010 ->2 为女。

hobby set('write','swim','game')); 0001->1 为write 0010 -> 2 为swim 0100->4代表game

mysql> create table t2( name varchar(20), gender enum('男','女'), hobby set('write','swim','game'));
Query OK, 0 rows affected (0.01 sec)

mysql> desc t2;
+--------+----------------------------+------+-----+---------+-------+
| Field  | Type                       | Null | Key | Default | Extra |
+--------+----------------------------+------+-----+---------+-------+
| name   | varchar(20)                | YES  |     | NULL    |       |
| gender | enum('男','女')            | YES  |     | NULL    |       |
| hobby  | set('write','swim','game') | YES  |     | NULL    |       |
+--------+----------------------------+------+-----+---------+-------+
mysql> insert into t2 (name,gender,hobby)
    -> values('张三','男','game,swim');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t2;
+--------+--------+-----------+
| name   | gender | hobby     |
+--------+--------+-----------+
| 张三   | 男     | swim,game |
+--------+--------+-----------+
1 row in set (0.00 sec)
mysql> insert into t2 values('李四',1,1);
Query OK, 1 row affected (0.01 sec)

mysql> insert into t2 values('王五',2,3);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t2;
+--------+--------+------------+
| name   | gender | hobby      |
+--------+--------+------------+
| 张三   | 男     | swim,game  |
| 李四   | 男     | write      |
| 王五   | 女     | write,swim |
+--------+--------+------------+
3 rows in set (0.00 sec)

6.2 set和enum的查找

mysql> select * from t2;
+--------+--------+-----------------+
| name   | gender | hobby           |
+--------+--------+-----------------+
| 张三   | 男     | swim,game       |
| 李四   | 男     | write           |
| 王五   | 女     | write,swim      |
| 赵六   | 女     | game            |
| 田七   | 女     | write,game      |
| 中国   | 女     | swim,game       |
| 人民   | 男     | write,swim,game |
+--------+--------+-----------------+
7 rows in set (0.00 sec)

6.2.1 enum的查找

 使用' ' 或者 数字都可以查找到

mysql> select * from t2 where gender='男';
mysql> select * from t2 where gender=1;

6.2.2 set的查找

同enum,但是有个缺陷,只能查找到恰好为目标的对象。

mysql> select * from t2 where hobby=1;
+--------+--------+-------+
| name   | gender | hobby |
+--------+--------+-------+
| 李四   | 男     | write |
+--------+--------+-------+

 要想查询到包换目标的所有对象,需要使用函数 find_in_set

find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0;

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

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

mysql> select find_in_set('a','b,d,c');
+--------------------------+
| find_in_set('a','b,d,c') |
+--------------------------+
|                        0 |
+--------------------------+
mysql> select * from t2 where find_in_set('write',hobby);
+--------+--------+-----------------+
| name   | gender | hobby           |
+--------+--------+-----------------+
| 李四   | 男     | write           |
| 王五   | 女     | write,swim      |
| 田七   | 女     | write,game      |
| 人民   | 男     | write,swim,game |
+--------+--------+-----------------+

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

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

相关文章

IDE装上ChatGPT,一天开发一个系统

昨天白天在写代码,晚上看了一场直播,是两个技术的直播: 一个是技术总监,一个是号称Java之父的余**。 结果Java之父被技术总监吊打。然后匆匆下播。 技术这玩意,真的就是真的! 白天我开发了一个系统&…

二叉搜索树的oj

目录 一、根据二叉树创建字符串 二、二叉树的层序遍历 三、二叉树的层序遍历Ⅱ 四、二叉树的最近公共祖先 ①递归求解 ②回溯求解 五、二叉搜索树和双向链表 六、根据一棵树的前序遍历与中序遍历构造二叉树 七、从中序与后序遍历序列构造二叉树 八、二叉树的任一遍历…

大厂面试-算法优化:冒泡排序你会优化吗?

关注公众号:”奇叔码技术“ 回复:“java面试题大全”或者“java面试题” 即可领取资料 原文:冒泡排序及优化代码 https://blog.csdn.net/weixin_43989347/article/details/122025689原文:十大经典排序算法 https://frxcat.fun/pa…

矩阵相似题型总结

矩阵相似题型总结 (一)题型一:判断含重特征值的方阵A能否相似对角化(即能否相似于对角阵) 所有特征值均不同的矩阵必可相似对角化,含重特征值的矩阵呢?可如下做 (1)求A的…

C++linux高并发服务器项目实践 day4

Clinux高并发服务器项目实践 day4模拟实现ls -l指令文件属性操作函数access函数chmod 与chowntruncate函数目录操作函数mkdir和rmdirrenamechdir和getcwd目录遍历函数dup、dup2函数dupdup2fcntl函数模拟实现ls -l指令 #include<sys/types.h> #include<sys/stat.h>…

为何巴菲特和马斯克站在了一起?

股神巴菲特虽然非常传奇&#xff0c;但是马斯克对其并不感冒。马斯克曾经在一档电视节目中表示&#xff0c;实业才是王道&#xff0c;埋怨金融业抢走太多人才和精英&#xff0c;暗指巴菲特为年轻人做了错误示范。当然&#xff0c;巴菲特的投资非常厉害&#xff0c;但也有失手的…

2-修改example适用于不同开发板

1.问题 手上只有基于nRF52811芯片的BMD360开发板,与pca10056e开发板同一个芯片.所以pca10056e的example都可以适用于BMD360开发板,只需要修改开发板相同的输入输出硬件管脚即可.因为BMD360开发板与pca10056e开发板的输入输出管脚不同. 而BMD360开发板输入输出管脚于PCA10040相同…

【数据结构】七大排序算法详解Java

目录 1.排序算法分类 1.直接选择排序 代码展示&#xff1a; 2.直接插入排序 核心思路&#xff1a; 代码展示&#xff1a; ​编辑 3.希尔排序 思路分析&#xff1a; 代码展示&#xff1a; 4.归并排序 代码展示&#xff1a; 5.快速排序(挖坑法) 思路分析&#xff1a; …

OJ系统刷题 第十篇

13444 - 求出e的值 时间限制 : 1 秒 内存限制 : 128 MB 利用公式e11/!1​1/2!​1/3!​...1/n!​&#xff0c;求e的值&#xff0c;要求保留小数点后10位。 输入 输入只有一行&#xff0c;该行包含一个整数n&#xff08;2≤n≤15&#xff09;&#xff0c;表示计算e时累加到1/…

计算机操作系统第四版第六章输入输出系统—课后题答案

1.试说明I/O系统的基本功能。 隐藏物理设备的细节、与设备的无关性、提高处理机和I/O设备的利用率、对I/O设备进行控制、确保对设备的正确共享、错误处理 2.简要说明I/O软件的4个层次的基本功能。 用户层I/O软件&#xff1a;实现与用户交互的接口&#xff0c;用户可直接调用该层…

4.8、socket介绍

4.8、socket1. socket介绍1. socket介绍 所谓 socket&#xff08;套接字&#xff09;&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换数据的机制。从所处的地位…

阿里云centos7搭建ChatGPT网站

需要的环境 有一台外网的服务器 拥有一个OpenAI API Key Centos7&#xff08;其他服务器也行&#xff09; nodejs 前端github上 大神写的 https://github.com/ddiu8081/chatgpt-demo/ 一.安装node.js centos7 安装node.js 二.安装pnpm npm i -g pnpm三.下载web前端项目从…

【2023最新】超详细图文保姆级教程:App开发新手入门(3)

上文回顾&#xff0c;我们已经完成了一个应用项目创建、导入、代码更新、代码同步和代码提交&#xff0c;本章继续我们的新手开发之旅&#xff0c;讲述一下如何将开发完成的应用进行编译&#xff0c;生成可供他人安装、可上架的应用安装包。 6 应用打包 应用打包&#xff0c;…

27个必备的Python技巧,你一定要知道!

目录 01. 为什么使用缩进来分组语句&#xff1f; Guido van Rossum 认为使用缩进进行分组非常优雅&#xff0c;并且大大提高了普通 Python 程序的清晰度。大多数人在一段时间后就学会并喜欢上这个功能。 由于没有开始/结束括号&#xff0c;因此解析器感知的分组与人类读者之间…

免费英文在线翻译-英文自动翻译

免费的自动翻译器 作为一款免费的自动翻译器&#xff0c;我们的产品可以为全球用户提供高质量、高效率的翻译服务&#xff0c;帮助他们更好地沟通和交流。 现在&#xff0c;随着数字化的进一步发展&#xff0c;人们之间的跨文化交流越来越频繁。然而&#xff0c;语言偏差和文…

22-JavaScript

目录 1.什么是JavaScript&#xff1f; 1.1.JS、HTML、CSS关系 1.2.JS是如何运行的&#xff1f; 2.JS前置知识 2.1.第一个JS程序 PS&#xff1a;JS书写位置 2.2.JS书写格式 2.2.1.行内格式 ​2.2.2.内嵌格式 ​2.2.3.外部格式 2.3.注释&#xff08;script标签中&…

【软件测试】测试用例

目录 &#x1f337;1. 测试用例的基本要素 &#x1f337;2. 测试用例的设计方法 &#x1f333;2.1 基于需求进行测试用例的设计 ⭐️&#xff08;1&#xff09;功能需求测试分析 ⭐️&#xff08;2&#xff09;非功能需求测试分析 &#x1f333;2.2 具体的设计方法 &#…

【Python搞笑游戏】因蔡徐坤打篮球动作超火,被某程序员写成了一款游戏,画面美到不敢看,成功学到了精髓~(附源码免费)

导语 之前网络最火的梗&#xff0c;非“C徐坤打篮球”莫属。个人感觉&#xff0c;只有多年前的“春哥纯爷们”堪与匹敌&#xff01; 虽然说C徐坤打篮球是一个老梗了&#xff0c;但是确实非常搞笑&#xff0c;今天就跟着小编一起来回忆一下吧&#xff01; “我是练习两年半的…

qt - 隐式共享与d-pointer技术

文章目录前言1. 隐式共享2. d-pointer在隐式共享中的应用3. 二进制代码兼容4. d-pointer模式的实现5. QObject中的d-pointer前言 一般情况下&#xff0c;一个类的多个对象所占用的内存是相互独立的。如果其中某些对象数据成员的取值完全相同&#xff0c;我们可以令它们共享一块…

ESP32学习二-更新Python版本(Ubuntu)

一、简介 在一些场景里边&#xff0c;因为Python的版本过低&#xff0c;导致一些环境无法安装。这里来介绍以下&#xff0c;如何升级自己已安装的Python版本。例如如下情况&#xff1a; 二、实操 1.查看本地版本 python --version 2.添加源 sudo add-apt-repository ppa:jona…