MySQL库数据类型

目录

1.数值类型

[1.1 tinyint类型](#1.1 tinyint类型)

[1.2 bit类型](#1.2 bit类型)

[1.3 小数类型](#1.3 小数类型)

[1.3.1 float](#1.3.1 float)

[1.3.2 decimal](#1.3.2 decimal)

2.字符串类型

[2.1 char](#2.1 char)

[2.2 varchar](#2.2 varchar)

[2.3 char和varchar比较](#2.3 char和varchar比较)

3.日期和时间类型

4.enum和set

[5. 集合查询使用find_ in_ set函数](#5. 集合查询使用find_ in_ set函数)


本文讲述一些常见的数据类型

1.数值类型

1.1 tinyint****类型

在 MySQL 中,整型可以指定是有符号的和无符号的,默认是有符号的。
可以通过 UNSIGNED 来说明某个字段是无符号的

注意:尽量不使用 unsigned ,对于 int 类型可能存放不下的数据, int unsigned 同样可能存放不
下,

1.2 bit****类型

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


bit 字段在显示时,是按照 ASCII 码对应的值显示。

1.3 小数类型

1.3.1 float

float [(m, d)] [ unsigned ] : M 指定显示长度, d 指定小数位数,占用空间 4 个字节
小数: float(4,2) 表示的范围是 -99.99 ~ 99.99 , MySQL 在保存值时会进行四舍五入

不指定显示长度和小数位数,能存多大是多大

整数部分和小数部分最大能记录六位float表示的精度大约是7位。
如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是0 ~ 99.99,直接把负数部分砍掉

1.3.2 decimal

decimal (m, d) [ unsigned ] : 定点数 m 指定长度, d 表示小数点的位数
decimal和float的区别在与,表示的精度不一样

decimal 整数最大位数 m 为 65 。支持小数最大位数 d 是 30 。如果 d 被省略,默认为 0. 如果 m 被省略,默认是10 。

2.字符串类型

2.1 char

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

2.2 varchar

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

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

2.3 charvarchar****比较

如果数据确定长度都一样,就使用定长( char ),比如:身份证,手机号, md5
如果数据长度有变化 , 就使用变长 (varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。
定长的意义是,直接开辟好对应的空间
变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

3.日期和时间类型

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

每次更新数据都会改变时间戳

4.enum和set

enum :枚举, " 单选 " 类型;
enum(' 选项 1',' 选项 2',' 选项 3',...);
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是" 数字 " ,因为这些选项的每个选项值依次对应如下数字: 1,2,3,.... 最多 65535个;当我们添加枚举值时,也可以添加对应的数字编号。
set :集合, " 多选 " 类型;
set(' 选项值 1',' 选项值 2',' 选项值 3', ...);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是" 数字 " ,因为这些选项的每个选项值依次对应如下数字: 1,2,4,8,16,32 , ....
最多 64 个。
说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。

例子:有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]

set也可以使用数据标识,采用比特位的方式把每个位置标志,例如上述有四个hobby,登山,游泳,篮球,武术,分别对应相应的比特位

现有如下数据


想查找所有喜欢登山的人

select * from votes where hobby= ' 登山 ' ;


不能查询出所有,爱好为登山的人。

5. 集合查询使用find_ in_ set函数

find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回 0 ;
str_list 用逗号分隔的字符串。


查询爱好登山的人:

相关推荐
IvorySQL10 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·10 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德10 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫11 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i11 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.11 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn11 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露12 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星12 小时前
sql语言之分组语句group by
java·数据库·sql
符哥200812 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql