【MySQL数据库】数据类型详解

目录

  • 数据类型
  • tinyint类型(整形)
  • bit类型
  • 小数
    • 浮点数 float、double
    • decimal
  • 字符串类型
    • char
    • varchar
    • char与varchar的比较
  • 日期时间类型
  • enum和set
  • 总结

数据类型

在这里插入图片描述

tinyint类型(整形)

例:

mysql> create table tt1(num tinyint);mysql> insert  into tt1 values(1);mysql> insert  into tt1 values(128); -- 越界插入,报错
ERROR 1264 (22003): Out of range value for column 'num' at row 1mysql> select * from tt1;+------+| num  |+------+|  1   |+------+1 row in set (0.00 sec)
  • 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
  • 可以通过UNSIGNED来说明某个字段是无符号的
 mysql> create table tt2(num tinyint unsigned);mysql> insert into tt2 values(-1); -- 无符号,范围是: 0 - 255ERROR 1264 (22003): Out of range value for column 'num' at row 1mysql> insert into tt2 values(255);Query OK, 1 row affected (0.02 sec)mysql> select * from tt2;+------+| num  |+------+| 255  |+------+1 row in set (0.00 sec)

bit类型

bit[(M)]

位字段类型

M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

  • bit字段在显示时,是按照ASCII码对应的值显示。
 mysql> insert into tt4 values(65, 65);mysql> select * from tt4;+------+------+| id   | a    |+------+------+|   10 |      |   |   65 | A    |+------+------+

如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间

小数

浮点数 float、double

float[(m, d)] [unsigned]

M指定显示长度

d指定小数位数,占用空间4个字节

  • 如float(4,2)表示的范围是-99.99 ~ 99.99
  • MySQL在保存值时会进行四舍五入,四舍五入超过范围则会失败
 mysql> create table tt6(id int, salary float(4,2));Query OK, 0 rows affected (0.01 sec)mysql> insert into tt6 values(100, -99.99);Query OK, 1 row affected (0.00 sec)mysql> insert into tt6 values(101, -99.991);Query OK, 1 row affected (0.00 sec)mysql> select * from tt6;+------+--------+| id   | salary |+------+--------+|  100 | -99.99 ||  101 | -99.99 |+------+--------+2 rows in set (0.00 sec)
  • double与float类似,只是精度更高,占8字节

decimal

decimal(m, d) [unsigned]

定点数m指定长度,d表示小数点的位数

  • decimal和float区别:

float和decimal表示的精度不一样

 mysql> create table tt8 ( id int, salary float(10,8), salary2 decimal(10,8));mysql> insert into tt8 values(100,23.12345612, 23.12345612);mysql> create table tt8 ( id int, salary float(10,8), salary2  decimal(10,8));mysql> select * from tt8;+------+-------------+-------------+
| id   | salary      | salary2     |
+------+-------------+-------------+
|  100 | 23.12345695 | 23.12345612 |
+------+-------------+-------------+
  • float表示的精度大约是7位
  • decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10
  • 如果希望小数的精度高,可以使用decimal

字符串类型

char

char(L): 

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

  • 注意:MySQL中的字符和我们在语言中学的字符是不一样的,语言中的字符指的是一个字节的数据,但MySQL中的字符就真的代表一个字符,无论你是‘a’还是‘中’,都是一个字符
 mysql> create table tt9(id int, name char(2));mysql> insert into tt9 values(100, 'ab');mysql> insert into tt9 values(101, '中国');mysql> insert into tt9 values(101, '中');mysql> select * from tt9;
+------+--------+
| id   | name   |
+------+--------+
|  100 | ab     |
|  101 | 中国   |
|  101 ||
+------+--------+

varchar

varchar(L)

可变长度字符串

L表示字符长度,最大长度65535个字节,注意单位是字节,char,单位是字符

mysql> create table tt10(id int ,name varchar(6)); --表示这里可以存放6个字符mysql> insert into tt10 values(100, 'hello'); mysql> insert into tt10 values(100, '我爱你,中国');mysql> select * from tt10;+------+--------------------+| id   | name               |+------+--------------------+|  100 | hello              ||  100 | 我爱你,中国         |+------+--------------------+ 

char与varchar的比较

  • char是定长的,你定义多长他就会分配多大的空间
  • varchar是可变的,你定义的只是它的上限,实际上它的空间会根据的数据的大小而变化,也就是给多少用多少

那在平时我们该如何选择使用哪一种呢?

  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。

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

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

在这里插入图片描述

日期时间类型

date

‘yyyy-mm-dd’ ,占用三字节

datetime 

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

timestamp

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

  • timetamp 在使用时会自动更新,其他两个需要外部插入
//建表
mysql> create table birthday (t1 date, t2 datetime, t3 timestamp);Query OK, 0 rows affected (0.01 sec)//插入数据:
mysql> insert into birthday(t1,t2) values('1997-7-1','2008-8-8 12:1:1'); 
--插入两种时间Query OK, 1 row affected (0.00 sec)mysql> select * from birthday;+------------+---------------------+---------------------+| t1         | t2                  | t3                  |+------------+---------------------+---------------------+| 1997-07-01 | 2008-08-08 12:01:01 | 2017-11-12 18:28:55 | +------------+---------------------+---------------------+--添加数据时,时间戳自动补上当前时间//更新数据:
mysql> update birthday set t1='2000-1-1';Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from birthday;+------------+---------------------+---------------------+| t1         | t2                  | t3                  |+------------+---------------------+---------------------+| 2000-01-01 | 2008-08-08 12:01:01 | 2017-11-12 18:32:09 | +------------+---------------------+---------------------+
-- 更新数据,时间戳会更新成当前时间

enum和set

enum

枚举类型
enum(‘选项1’,‘选项2’,‘选项3’,…);
多选一类型

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值

而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;

当我们添加枚举值时,也可以添加对应的数字编号。

set

集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值

而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,… 最多64个。

  • enum中只能插入枚举类型中的数据,不能插入枚举类型没有的数据,字符或下标(从1开始)插入都行

  • set同样也只能插入原有的数据,不过可以选择单个或者多个一起插入

  • 注意,enum中可以使用下标插入,但是set中是以位图的方式插入的,如:2的二进制为00010,所以我们插入的是第二个数据

  • 数据可以为NULL,也可以是空串

下面是一个调查表实例,调查人的喜好与性别:

mysql> create table votes(-> username varchar(30),
-> hobby set('登山','游泳','篮球','武术'),
-> gender enum('男','女'));    Query OK, 0 rows affected (0.02 sec)insert into votes values('雷锋', '登山,武术', '男');insert into votes values('Juse','登山,武术',2);//插入数据
select * from votes where gender=2;+----------+---------------+--------+| username | hobby         | gender |+----------+---------------+--------+| Juse     | 登山,武术      ||+----------+---------------+--------+

查询筛选语句:

1.enum

 select * from votes where .......
mysql> select * from votes where gender='男';+----------+--------+--------+| username | hobby  | gender |+----------+--------+--------+| LiLei    | 登山   ||+----------+--------+--------+

2.set
find_ in_ set函数

在一个集合中查找某一个元素是否存在,返回值为对应的下标

mysql> select find_in_set('a', 'a,b,c');mysql> select find_in_set('a', 'a,b,c');+---------------------------+| find_in_set('a', 'a,b,c') |+---------------------------+|                         1 |+---------------------------+

所以我们查找时可以用该函数的返回值充当where的判断值

mysql> select * from votes where find_in_set('登山', hobby);

找多个

mysql> select * from votes where find_in_set('登山', hobby) and find_in_set('羽毛球', hobby);

总结

其实数据类型就是MySQL中的一种天然的约束,满足就可以插入

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

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

相关文章

咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包

咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包(内有教程) 刷机教程简单说明: 1、把下载好的刷机包,U盘里建立一个upgrade文件夹,固件放入此文件夹里,放入U盘中,注意升级包为压缩包不要对…

CS61A:STRING REPRESENTATION

Python 规定所有对象都应该产生两种不同的字符串表示形式:一种是人类可解释的文本,另一种是 Python 可解释的表达式。字符串的构造函数 str 返回一个人类可读的字符串。在可能的情况下,repr 函数会返回一个计算结果相等的 Python 表达式。rep…

LangChain缓存嵌入技术完全指南:CacheBackedEmbedding原理与实践(附代码示例)

一、嵌入缓存技术背景与应用场景 1.1 为什么需要嵌入缓存? 算力消耗问题:现代嵌入模型(如text-embedding-3-small)单次推理需要约0.5-1秒/文本 资源浪费现状:实际业务中约30%-60%的文本存在重复计算 成本压力&#…

精益数据分析(3/126):用数据驱动企业发展的深度解析

精益数据分析(3/126):用数据驱动企业发展的深度解析 大家好!一直以来,我都坚信在当今竞争激烈的商业环境中,数据是企业获得竞争优势的关键。最近深入研究《精益数据分析》这本书,收获颇丰&…

wpf ScaleTransform

在WPF中,ScaleTransform是用于实现元素缩放的核心类,属于System.Windows.Media命名空间下的变换类型。以下是其主要特性与使用方式的总结: ‌核心属性‌ ‌缩放比例‌ ScaleX:水平方向缩放比例(默认1.0,即…

用纯Qt实现GB28181协议/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲

一、前言 在技术的长河中探索,有些目标一旦确立,便如同璀璨星辰,指引着我们不断前行。早在2014年,我心中就种下了用纯Qt实现GB28181协议的种子,如今回首,一晃十年已逝,好在整体框架和逻辑终于打…

0x01、Redis 主从复制的实现原理是什么?

Redis 主从复制概述 Redis 的主从复制是一种机制,允许一个主节点(主实例)将数据复制到一个或多个从节点(从实例)。通过这一机制,从节点可以获取主节点的数据并与之保持同步。 复制流程 开始同步&#xf…

整活 kotlin + springboot3 + sqlite 配置一个 SQLiteCache

要实现一个 SQLiteCache 也是很简单的只需要创建一个 cacheManager Bean 即可 // 如果配置文件中 spring.cache.sqlite.enable false 则不启用 Bean("cacheManager") ConditionalOnProperty(name ["spring.cache.sqlite.enable"], havingValue "t…

深入探索如何压缩 WebAssembly

一、初始体积:默认 Release 构建 我们从最基础的构建开始,不开启调试符号,仅使用默认的 release 模式: $ wc -c pkg/wasm_game_of_life_bg.wasm 29410 pkg/wasm_game_of_life_bg.wasm这是我们优化的起点 —— 29,410 字节。 二…

多角度分析Vue3 nextTick() 函数

nextTick() 是 Vue 3 中的一个核心函数,它的作用是延迟执行某些操作,直到下一次 DOM 更新循环结束之后再执行。这个函数常用于在 Vue 更新 DOM 后立即获取更新后的 DOM 状态,或者在组件渲染完成后执行某些操作。 官方的解释是,当…

前端面试-自动化部署

基础概念 什么是CI/CD?在前端项目中如何应用?自动化部署相比手动部署有哪些优势?常见的自动化部署工具有哪些?举例说明它们的区别(如Jenkins vs GitHub Actions)。如何通过Git Hook实现自动化部署&#xf…

架构生命周期(高软57)

系列文章目录 架构生命周期 文章目录 系列文章目录前言一、软件架构是什么?二、软件架构的内容三、软件设计阶段四、构件总结 前言 本节讲明架构设计的架构生命周期概念。 一、软件架构是什么? 二、软件架构的内容 三、软件设计阶段 四、构件 总结 就…

GPTNet如何革新创意与效率

引言 人工智能正在以前所未有的速度改变我们的工作与生活方式,从智能写作到视觉创作,AI工具已成为不可或缺的伙伴。在众多平台中,GPTNet以其强大的功能整合和直观体验崭露头角。它不仅汇集了GPT系列、Claude、Grok、Gemini等顶级对话模型&am…

【计网】SSL/TLS核心原理

序言 在HTTP协议中,信息是明文传输的,因此为了通信安全就有了HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)协议。HTTPS也是一种超文本传送协议,在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务端的…

Web Components 开发与集成

以下是关于 Web Components 开发与集成 的系统知识梳理,涵盖核心概念、高级特性、集成与优化等内容: 一、Web Components 核心概念 技术作用核心 APICustom Elements定义可复用的自定义 HTML 元素customElements.define()、生命周期钩子(connectedCallback 等)Shadow DOM封…

day26 学习笔记

文章目录 前言一、图像颜色转换1.HSV颜色空间2.颜色转换 二、灰度化1.最大值法2.平均值法3.加权均值法 三、二值化1.全局阈值法1.阈值法(THRESH_BINARY)2.反阈值法(THRESH_BINARY_INV)3.截断阈值法(THRESH_TRUNC)4.低阈值零处理(THRESH_TOZERO)5.超阈值零处理(THRESH_TOZERO_IN…

威锋VL822-Q7T10GHUB芯片适用于扩展坞显示器

一、概述 VL822-Q7T是VIA Lab(威盛电子旗下专注于USB相关技术研发的子公司)精心打造的一款高性能USB 3.1 Gen2集线器控制器芯片。在当今数字化时代,USB接口作为设备连接与数据传输的核心通道,其性能与稳定性至关重要。VL822-Q7T凭…

华为OD机试真题——最小的调整次数/特异性双端队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《最小的调…

关于 Spring Boot 微服务解决方案的对比,并以 Spring Cloud Alibaba 为例,详细说明其核心组件的使用方式、配置及代码示例

以下是关于 Spring Boot 微服务解决方案的对比,并以 Spring Cloud Alibaba 为例,详细说明其核心组件的使用方式、配置及代码示例: 关于 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案! https://sca.aliyun.com/?spm7145af80…

常见的爬虫算法

1.base64加密 base64是什么 Base64编码,是由64个字符组成编码集:26个大写字母AZ,26个小写字母az,10个数字0~9,符号“”与符号“/”。Base64编码的基本思路是将原始数据的三个字节拆分转化为四个字节,然后…