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

mysql--数据类型

目录

搞定所有数据类型

一、常见数据类型分类

二、数值类型

1、bit类型

2、float类型

​编辑3、decimal类型

4、字符类型

(1)char

(2)varchar

(3)varchar和char有甚区别?

(4)char varchar如何选择?

5、日期和时间类型

​编辑

6、Enum 和 set类型

比特位存储

7、Enum 和 set类型查找

find_in_set(xxx,filed_name)函数


一、常见数据类型分类

分类数据类型描述示例
数值类型tinyint1 字节,范围从 -128 到 127tinyint(3)
smallint2 字节,范围从 -32,768 到 32,767smallint
mediumint3 字节,范围从 -8,388,608 到 8,388,607mediumint
int / integer4 字节,范围从 -2,147,483,648 到 2,147,483,647int
bigint8 字节,范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807bigint
float4 字节,单精度浮点数float(7,4)
double8 字节,双精度浮点数double
decimal / numeric精确数值,可以指定精度和小数位数decimal(10,2)
日期和时间类型date日期,格式为 'yyyy-mm-dd'date
datetime日期和时间,格式为 'yyyy-mm-dd hh:mm:ss'datetime
timestamp时间戳,自动初始化和更新timestamp
time时间,格式为 'hh:mm:ss'time
year年,格式为 'yyyy'year(4)
字符串类型char固定长度字符串,最大 255 字节char(10)
varchar可变长度字符串,最大 65,535 字节varchar(255)
tinytext最多 255 字节的文本tinytext
text最多 65,535 字节的文本text
mediumtext最多 16,777,215 字节的文本mediumtext
longtext最多 4,294,967,295 字节的文本longtext
binary固定长度的二进制数据binary(10)
varbinary可变长度的二进制数据varbinary(255)
tinyblob最多 255 字节的二进制大对象tinyblob
blob最多 65,535 字节的二进制大对象blob
mediumblob最多 16,777,215 字节的二进制大对象mediumblob
longblob最多 4,294,967,295 字节的二进制大对象longblob
json类型json存储 json 格式的数据json

二、数值类型


tinyint为例

只有数据合法才允许插入,否则不给插入
保证了整体数据库的规范性
这个叫做约束,整个约束反过来倒逼程序员要正确的输入数据

1、bit类型

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

如果是1位:范围是0-1
如果是2位:范围是0-3
如果是3位:范围是0-5
以此类推,其实就是二进制
超过位数的值不能被插入

示例:

create table table_name (
id bit(2)
);

2、float类型

float(m,d) [unsigned]

m:指定显示长度(超过显示长度,四舍五入)
d:小数位数
unsigned:将负数部分砍掉
小数点精度最大是7位

create table table_name (
id decimal(4,2)
);

例如:float(4,2)表示的范围是-99.99 - 99.99


3、decimal类型

decimal (m,d) [unsigned];

和float一样,但精度更高
float精度7位;decimal整数56位,小数30位

如果d被省略,默认为0;m被省略,默认为10

区别:对更小的数据,float可能会修改部分数据;但decimal不会,而保持原值

4、字符类型

(1)char

char(L):固定长度字符串,L是可以存储的长度,单位是字符,最大是255个字符
mysql中的字符,对应一个符号,而非字节,字符可是字母 / 汉字
‘ab’是两个字符;‘你好’是两个字符;‘45’也是两个字符

create table table_name(
name char(4)
);

(2)varchar

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

utf标准3个1字节表示一个字符,因此65535/3=21845个字符
gbk标准2个字节表示一个字符
同时,在varchar中,会有一个1-3个字节记录字符串的长度
因此,其实utf标准下,最大长度其实是21844

create table table_name (
name varchar(32)
);

(3)varchar和char有甚区别?

varchar(L)中的L表示上限,
而char(L)中的L表示固定长度
举个例子:

varchar(6)
如果数据是 'a' ,数据长度为1
如果数据是 'ab',数据长度为2
如果数据为 'abc',数据长度为3
....
用多少,分配多少,但不能超过6

而char(6):
如果数据是 ‘a’,数据长度为6
如果数据是‘ab’,数据长度为6
...
即大小固定

(4)char varchar如何选择?

如果数据确定长度都一样,用char,例如身份证、学号、身高、体重
(应该没有人的身高突破4位数吧?比如1700cm?)
如果数据有变化,用varchar,例如路程、地址
定长的磁盘空间比较浪费,但是效率高
变长的磁盘空间比较节省,但是效率低

5、日期和时间类型

常用三种日期类型:date、datetime、timestamp

据类型存储大小描述
date3 字节存储日期,格式为 YYYY-MM-DD,范围:1000-01-01 到 9999-12-31
datetime8 字节存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS,范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59
timestamp4 字节存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS,范围:1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC
time3 字节存储时间,格式为 HH:MM:SS,范围:'-838:59:59' 到 '838:59:59'
year1 字节存储年份,格式为 YYYY,范围:1901 到 2155

 示例
创建一个时间类型表:

create table time_table(
d1 date,
d2 datetime,
d3 timestamp,
d4 time,
d5 year
);

插入时间:

insert into time_table(d1, d2, d3, d4, d5) values(
'2024-10-14',
 '2024-10-14 15:30:00',
 current_timestamp, 
'12:30:00', 2024
);

6、Enum 和 set类型

特性enumset
定义用于存储单一值,值从预定义的字符串集合中选择一个用于存储多个值,值从预定义的字符串集合中选择多个
语法enum('value1', 'value2', ...)set('value1', 'value2', ...)
值的数量只能有一个值,最大值为 65535可以有多个值,最大值为 64
存储占用一个或两个字节占用一个或多个字节,具体取决于存储的值的数量
使用场景适合用于选择单一选项,如性别、状态等适合用于选择多个选项,如兴趣、标签等
空值可以设置为空值可以设置为空值
排序根据定义的顺序排序按位排序
限制不允许重复值允许重复值

enum:枚举。“单选”类型
enum(选项1,‘选项2’,‘选项3’...);
给多个选项,但只能选一个,单选

set:集合,“多选”类型;
set(’选项1','选项2','选项3'....);
给多个选项,可选多个选项,多选
上述两个类型:只能插入所给的选项

比特位存储
数据类型定义例子存储值比特位
ENUMENUM('small', 'medium', 'large')'small' 存储为 101
'medium' 存储为 210
'large' 存储为 311
SETSET('music', 'sports', 'reading', 'traveling')'music,sports' 存储为 30000 0011
'reading' 存储为 80000 1000

set:二进制倒序,按顺序一个比特位对应一个选项

insert into table_name values set_name (n);#

对n:

0 = 0000,空串

1 = 0001,选择第一个

2 = 0010,选择第二个

3 = 0011,选择第一、第二个

7 = 0111,选择第一、第二、第三个

示例:

1、建立示例表

create table set_table(
id int,
sports set('唱','跳','rap')
);

2、插入数据看现象

​
insert into set_table values (1, 1);

​#1=01,对应第一个选项

​
insert into set_table values (2, 2);

​#2=01,对应第二个选项

insert into set_table values (3, 3);
#3=011,对应第一、第二选项

​

insert into set_table values (7,7);
#7=0111,对应前三个选项

enum:索引从1开始,从左到右,不是二进制

insert into enum_table valuse (n);

对n值:

n=0,空串

n=1,选择第一个

n=2,选择第二个

n=3,选择第三个

  • 每个 ENUM 值都有一个从 1 开始的索引。例如,如果定义 ENUM('small', 'medium', 'large'),那么 small 的索引为 1,medium 为 2,large 为 3。

7、Enum 和 set类型查找

查找某一个条件:严格匹配

select * from table_name where filed_name='xxx...';

find_in_set(xxx,filed_name)函数

查找所有匹配的条件:

select * from table_name where find_in_set('xxx',filed_name);

查找多个条件组合:

select * from table_name where find_in_set('xxx',filed_name) and find_in_set('yyy',filed_name) ;

也可以使用数字匹配:
select * from table_name where filed_name=num;
对应的是比特位图形式


http://www.kler.cn/news/356399.html

相关文章:

  • 前端vue项目使用Decimal.js做加减乘除求余运算
  • C++20中头文件source_location的使用
  • 大数据学习-Clickhouse
  • 数据结构——链表,哈希表
  • makefile和make
  • JavaWeb学习(3)
  • [项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp
  • 024 elasticsearch集群
  • 生财合伙人推荐 - 鞠海深-群控
  • 霍夫圆型硬币检测Matlab程序
  • GitHub与GitCode
  • vuefor循环动态展示图片不显示
  • ARM指令集和汇编语言的关联学习
  • 设计模式——代理模式(6)
  • 408算法题leetcode--第33天
  • 【概率论】泊松分布
  • Gorm操作数据库,有和没有WithContext的区别
  • 【设计模式】深入理解 Python 单例模式:从原理到实现
  • 第8篇:网络安全基础
  • Docker 安装sql server 登陆失败