设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间17 现在时间17 缓存数据 这个世界上很多东西会变,很多人会走。 但你在我心里,从开始的那一天,到现在从来没有变过。 我一直在等,等你的消息。

这个世界上很多东西会变,很多人会走。 但你在我心里,从开始的那一天,到现在从来没有变过。 我一直在等,等你的消息。 -- 盛夏的果实

查看: 810|回复: 0

Mysql中的数据类型用法及解读

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:26
  • 打卡月天数:1
  • 打卡总奖励:363
  • 最近打卡:2025-07-01 01:14:20
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
318
主题
276
精华
0
金钱
1281
积分
650
注册时间
2023-2-11
最后登录
2025-7-1

发表于 2025-5-31 05:40:47 | 显示全部楼层 |阅读模式
1.1数据类型分类

MySQL 数据类型可以分为三大类:

  • 数值类型:包括整数类型、浮点类型、定点类型等。
  • 字符串类型:包括
    1. CHAR
    复制代码
    1. VARCHAR
    复制代码
    1. TEXT
    复制代码
    等。
  • 日期和时间类型:包括
    1. DATE
    复制代码
    1. DATETIME
    复制代码
    1. TIMESTAMP
    复制代码
    等。

1.2 数值类型

数值类型在 MySQL 中主要有整型和小数型两种类型。

1.2.1 tinyint 类型
  1. tinyint
复制代码
类型是一个小的整数类型,通常用于存储小范围的整数。
范围

  • 有符号:-128 到 127
  • 无符号:0 到 255
  • 如果插入超出该范围的值,MySQL 会报错。
示例:
  1. CREATE TABLE tt1 (num tinyint);
  2. INSERT INTO tt1 VALUES(1);   -- 成功插入
  3. INSERT INTO tt1 VALUES(128); -- 报错,超出范围
复制代码
有符号正数:
1.png

有符号负数:
2.png

无符号数:
3.png


1.2.2 bit 类型
  1. bit
复制代码
类型用于存储位字段,可以存储二进制数据。
示例:
  1. CREATE TABLE tt4 (id INT, a BIT(8));
  2. INSERT INTO tt4 VALUES(10, 10); -- 存入10,显示可能是位二进制值
复制代码
(bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。)

  • 你可以定义存储的位数,例如
    1. bit(8)
    复制代码
    表示存储 8 位的二进制数。
  • 默认情况下,
    1. bit
    复制代码
    类型在存储时会显示为 ASCII 字符。
4.png

注:bit字段在显示时,是按照ASCII码对应的值显示
5.png


1.2.3 小数类型

1.2.3.1 float 类型
  1. float
复制代码
类型用于存储浮动的小数值,支持四舍五入。

  • 你可以通过
    1. float(M, D)
    复制代码
    来定义精度和小数位数,其中
    1. M
    复制代码
    为总位数,
    1. D
    复制代码
    为小数位数。
示例:
  1. CREATE TABLE tt6 (id INT, salary FLOAT(4, 2));
  2. INSERT INTO tt6 VALUES(100, -99.99);  -- 成功插入
  3. INSERT INTO tt6 VALUES(101, -99.991); -- 会进行四舍五入,存储为 -99.99
复制代码
案例:
小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。
6.png

如果是无符号数的float,其中的负数部分会被舍去。例如:
无符号小数:float(4,2)表示的范围是0 ~ 99.99,MySQL在保存值时会进行四舍五入。
1.2.3.2 decimal 类型
  1. decimal
复制代码
类型是定点数,精度更高,适用于需要精确存储小数的情况。

    1. decimal(M, D)
    复制代码
    表示最多可以存储
    1. M
    复制代码
    位数,其中
    1. D
    复制代码
    位是小数部分。
示例:
  1. CREATE TABLE tt7 (id INT, salary DECIMAL(5, 2));
  2. INSERT INTO tt7 VALUES(100, 99.99);  -- 成功插入
复制代码
注: decimal类型和float类型很像,他们都支持四舍五入,他们的无符号类型都是舍去负数,但是decimal类型的精度比float类型更高。
例如:
7.png


1.3 字符串类型


1.3.1 char 类型
  1. char
复制代码
是固定长度的字符串类型,适用于存储长度固定的字符串数据。

  • 长度
    1. L
    复制代码
    最大为 255 字符。
示例:
  1. CREATE TABLE tt9 (id INT, name CHAR(2));
  2. INSERT INTO tt9 VALUES(100, 'ab');    -- 成功插入
  3. INSERT INTO tt9 VALUES(101, '中国');  -- 成功插入
复制代码
1.3.2 varchar 类型
  1. varchar
复制代码
是可变长度的字符串类型,适用于存储长度不固定的字符串数据。

  • 最大长度是 65535 字节,实际存储的长度取决于字符集。
示例:
  1. CREATE TABLE tt10 (id INT, name VARCHAR(6));
  2. INSERT INTO tt10 VALUES(100, 'hello');           -- 成功插入
  3. INSERT INTO tt10 VALUES(100, '我爱你,中国');     -- 成功插入
复制代码
请思考为什么会出现这种情况?
8.png

原因是:
  1. CHAR
复制代码
  1. VARCHAR
复制代码
类型在 MySQL 中存储的是字符而非字节。在默认的
  1. utf8
复制代码
字符集下,每个字符通常占用 3 个字节。
由于
  1. VARCHAR
复制代码
是可变长度的字符串类型,它不仅存储字符本身,还需要额外的空间来记录实际数据的长度。因此,在
  1. utf8
复制代码
编码下,
  1. VARCHAR
复制代码
字段的最大字符数是 21844。
这个限制是因为
  1. VARCHAR
复制代码
的最大字节数为 65535 字节,而每个字符占用 3 个字节,再加上存储长度的开销(最多 3 个字节),因此实际能存储的最大字符数为
  1. 65535 / 3 = 21845
复制代码
,减去存储长度所需的空间后,最终可以存储最多 21844 个字符。
1.3.3charVSvarchar
9.png

如何选择定长或变长字符串?
定长(
  1. CHAR
复制代码

如果数据的长度确定且不会变化,使用定长(
  1. CHAR
复制代码
)类型更为合适。例如:身份证、手机号、MD5 值等。
变长(
  1. VARCHAR
复制代码

如果数据的长度有变化,可以使用变长(
  1. VARCHAR
复制代码
)类型。例如:名字、地址等数据。
优缺点对比:
定长(
  1. CHAR
复制代码

优点

  • 存储固定长度的数据时效率高。
  • 因为空间已经预分配,查询时访问速度较快。
缺点

  • 存储短于定义长度的数据时会浪费空间。
  • 例如,
    1. CHAR(10)
    复制代码
    存储 3 个字符的数据时,会浪费 7 个字符的空间。
变长(
  1. VARCHAR
复制代码

优点

  • 根据实际字符长度分配空间,节省存储。
缺点

  • 需要动态计算长度,相比
    1. CHAR
    复制代码
    稍慢。
  • 在频繁查询或更新时,效率可能较低

1.4 日期和时间类型

常用的日期和时间类型:

  • DATE:存储日期,格式为
    1. 'yyyy-mm-dd'
    复制代码

  • DATETIME:存储日期和时间,格式为
    1. 'yyyy-mm-dd HH:ii:ss'
    复制代码

  • TIMESTAMP:存储时间戳,从1970年1月1日开始计算。
10.png


1.5 enum 和 set 类型


1.5.1 enum 类型
  1. enum
复制代码
类型用于存储“单选”项。每个选项都有一个数字编号,对应存储在数据库中的实际值。
示例:
  1. CREATE TABLE votes (username VARCHAR(30), gender ENUM('男', '女'));
  2. INSERT INTO votes VALUES('张三', '男');
复制代码
11.png

enum里面的值默认下表从0开始,0表示空NULL

1.5.2 set 类型
  1. set
复制代码
类型用于存储“多选”项,可以选择多个值,值的组合会以数字标识。
示例:
  1. CREATE TABLE votes (username VARCHAR(30), hobby SET('登山', '游泳', '篮球', '武术'));
  2. INSERT INTO votes VALUES('雷锋', '登山,游泳');
复制代码
12.png

爱好:爬山登月打球游泳睡觉
601100
510100
原因:
  1. SET
复制代码
类型中的值是按二进制位存储的,每个选项对应一个二进制位。每个选项的值会用一个数字表示,数字的每一位代表一个选项的状态(是否选中)。这样可以节省存储空间。

1.6 find_in_set函数
  1. find_in_set(sub, str_list)
复制代码
函数用于查找一个字符串是否在由逗号分隔的字符串列表中。

  • 如果
    1. sub
    复制代码
    1. str_list
    复制代码
    中,返回其位置(下标)。
  • 如果
    1. sub
    复制代码
    不在
    1. str_list
    复制代码
    中,返回 0。
示例:

    1. find_in_set('a', 'a,b,c')
    复制代码
    返回 1,表示
    1. 'a'
    复制代码
    1. 'a,b,c'
    复制代码
    中的第一个位置。
    1. find_in_set('d', 'a,b,c')
    复制代码
    返回 0,表示
    1. 'd'
    复制代码
    不在
    1. 'a,b,c'
    复制代码
    中。
13.png

同时它可以让查找更方便
14.png


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表