• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

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

    发布者: 网神之王 | 发布时间: 2025-6-14 14:29| 查看数: 136| 评论数: 0|帖子模式

    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.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 字符。

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


    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在保存值时会进行四舍五入。

    如果是无符号数的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类型更高。
    例如:


    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, '我爱你,中国');     -- 成功插入
    复制代码
    请思考为什么会出现这种情况?

    原因是:
    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

    如何选择定长或变长字符串?
    定长(
    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日开始计算。


    1.5 enum 和 set 类型


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

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

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

    爱好:爬山登月打球游泳睡觉
    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'
      复制代码
      中。

    同时它可以让查找更方便


    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    来源:https://www.jb51.net/database/339234wct.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

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