美文网首页数据库学习
2023-11-12第12章_MySQL数据类型精讲

2023-11-12第12章_MySQL数据类型精讲

作者: 大也 | 来源:发表于2023-11-20 08:59 被阅读0次

    -- ----------------------12数据精讲


    image.png image.png

    整型


    image.png

    1.显示宽度与取值范围无关
    2.从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性。

    1. UNSIGNED 无符号类型(非负)
      f1 INT UNSIGNED ;
      4.ZEROFILL 0填充
      int(M),必须和UNSIGNED ZEROFILL一起使用才有意义。

    浮点类型
    MySQL 存储浮点数的格式为: 符号(S) 、 尾数(M) 和 阶码(E)
    MySQL中单精度值使用 4 个字节,双精度值使用 8 个字节
    FLOAT(M,D)/DOUBLE(M,D),M称为 精度 ,D称为 标度
    浮点类型,也可以加 UNSIGNED ,但是不会改变数据范围
    存储时整数部分超出了范围,MySQL就会报错/小数点部分若超出范围四舍五入后 进位超范围,MySQL就会报错
    因为浮点数是不准确的,所以我们要避免使用“=”来 判断两个数是否相等。
    从MySQL 8.0.17开始,FLOAT(M,D) 和DOUBLE(M,D)用法在官方文档中已经明确不推荐使用

    DECIMAL(M,D) 推荐使用
    定点数最大取值范围与DOUBLE类型一样
    定点数在MySQL内部是以 字符串 的形式进行存储
    当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)
    定点数类型的精度范围时,则MySQL同样会进行四舍五入处理

    位类型:BIT 二进制类型 了解就好


    image.png

    日期与时间类型


    image.png

    1.从MySQL5.5.27开始,2位格式的YEAR已经不推荐使用 。
    2.TIME类型可以使用带有冒号的 字符串,比如' D HH:MM:SS' 、' HH:MM:SS 3.'、' HH:MM '、' D HH:MM '、' D HH '或' SS '格式
    4.YYYY-MM-DD HH:MM:SS
    5.TIMESTAMP 存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时 区。TIMESTAMP存储的时间范围比DATETIME要小很多,只能存储
    “1970-01-01 00:00:01 UTC”到“2038-01-19 03:14:07 UTC”之间的时间。
    /UTC表示世界统一时间,也叫 作世界标准时间。
    /TIMESTAMP底层存储的是毫秒值,距离1970-1-1 0:0:0 0毫秒的毫秒值。
    /两个日期比较大小或日期计算时,TIMESTAMP更方便、更快。
    /TIMESTAMP和时区有关。TIMESTAMP会根据用户的时区不同,显示不同的结果。

    推荐使用 DATETIME 日期时间类型
    注册时间、商品发布时间等建议存储使用 时间戳
    CREATE TABLE test_year(
    f1 YEAR,
    f2 DATE ,
    f3 TIME,
    dt DATETIME,
    ts TIMESTAMP
    );

    1. 文本字符串类型


      image.png

      VARCHAR(M) 定义时, 必须指定 长度M,否则报错。
      检索VARCHAR类型的字段数据时,会保留数据尾部的空格。VARCHAR类型的字段所占用的存储空间 为字符串实际长度加1个字节。

    mysql 使用 InnoDB 存储引擎
    InnoDB 存储引擎,建议使用VARCHAR类型。因为对于InnoDB数据表,内部的行存储格式并没有区 分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且 主要影响性能的因素 是数据行使用的存储总量 ,由于char平均占用的空间多于varchar,所以除了简短并且固定长度的, 其他考虑varchar。这样节省空间,对磁盘I/O和数据存储总量比较好。

    CREATE TABLE test_varchar1(
    NAME VARCHAR #错误
    );

    TEXT类型


    image.png

    CREATE TABLE test_text(
    tx TEXT
    );
    由于实际存储的长度不确定,MySQL 不允许 TEXT 类型的字段做主键

    ENUM类型


    image.png

    CREATE TABLE test_enum(
    season ENUM('春','夏','秋','冬','unknow') );

    SET类型


    image.png

    CREATE TABLE test_set(
    s SET ('A', 'B', 'C')
    );
    BINARY与VARBINARY类型


    image.png

    CREATE TABLE test_binary1(
    f1 BINARY,
    f2 BINARY(3),

    f3 VARBINARY,

    f4 VARBINARY(10)
    );
    BINARY和VARBINARY类似于CHAR和VARCHAR,只是它们存储的是二进制字符串。

    BLOB类型


    image.png

    用于 存储一个二进制的大对象,比如 图片 、 音频 和 视频 等
    在实际工作中,往往不会在MySQL数据库中使用BLOB类型存储大对象数据,通常会将图 片、音频和视频文件存储到 ,并将图片、音频和视频的访问路径存储到MySQL中。
    CREATE TABLE test_blob1(
    id INT,
    img MEDIUMBLOB
    );
    要对大文本字段进行模糊查询,MySQL 提供了 前缀索引

    JSON 类型
    JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻 松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式。
    CREATE TABLE test_blob1(
    js json
    );

    空间类型 知道有这么个类型就好

    【 强制 】小数类型为 DECIMAL,禁止使用 FLOAT 和 DOUBLE。
    说明:在存储的时候,FLOAT 和 DOUBLE 都存在精度损失的问题,很可能在比较值的时候,得 到不正确的结果。如果存储的数据范围超过 DECIMAL 的范围,建议将数据拆成整数和小数并 分开存储。
    【 强制 】如果存储的字符串长度几乎相等,使用 CHAR 定长字符串类型。
    【 强制 】VARCHAR 是可变长字符串,不预先分配存储空间,长度不要超过 5000。如果存储长度大 于此值,定义字段类型为 TEXT,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

    相关文章

      网友评论

        本文标题:2023-11-12第12章_MySQL数据类型精讲

        本文链接:https://www.haomeiwen.com/subject/adyuwdtx.html