• MySQL8 全部数据类型


    数字类型

    日期类型

     

    字符串类型

    CHAR和VARCHAR

    表列数和行大小限制

    MySQL每个表的硬限制为4096列,但对于给定的表,有效最大值可能更小。确切的列限制取决于几个因素:

    表的最大行大小限制列的数量(也可能是size),因为所有列的总长度不能超过此大小。

    各列的存储要求限制了适合给定最大行大小的列数。某些数据类型的存储要求取决于存储引擎,存储格式和字符集等因素。

    存储引擎可能会施加额外的限制来限制表列数。例如, InnoDB每个表的限制为1017列。

    即使存储引擎能够支持更大的行,MySQL表的内部限制最大行大小为65,535字节。BLOB和TEXT列只对行大小限制贡献9到12个字节,因为它们的内容与行的其余部分分开存储。

    InnoDB中对innodb_page_size(4KB,8KB,16KB和32KB)的设置,表的最大行大小略小于半页。例如,对于默认的16KB InnoDB页面大小,最大行大小略小于8KB 。

    比如:

    -- 此时最大行大小为66000,大于规定的65535
    CREATE TABLE `test_max_row_size` (
        a VARCHAR(10000),
        b VARCHAR(10000),
        c VARCHAR(10000),
        d VARCHAR(10000),
        e VARCHAR(10000),
        f VARCHAR(10000),
        g VARCHAR(6000)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    > 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
    > 时间: 0.004s

    报错是因为最大行大小的限制是所有列共享,而不是对单独列的限制。

    BINARY和VARBINARY

     BLOB和TEXT

     ENUM和SET

    -- SET类型,元素个数最大为64个
    CREATE TABLE `test_set` (
      a SET('a001','a002','a003','a004','a005','a006','a007','a008','a009','a0010','a0011','a0012','a0013','a0014','a0015','a0016','a0017','a0018','a0019','a0020','a0021','a0022','a0023','a0024','a0025','a0026','a0027','a0028','a0029','a0030','a0031','a0032','a0033','a0034','a0035','a0036','a0037','a0038','a0039','a0040','a0041','a0042','a0043','a0044','a0045','a0046','a0047','a0048','a0049','a0050','a0051','a0052','a0053','a0054','a0055','a0056','a0057','a0058','a0059','a0060','a0061','a0062','a0063','a0064')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    测试一下这两个类型

    CREATE TABLE `test_enum_set` (
      a SET('A','B','C'),
      b ENUM('','')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO test_enum_set VALUES('A,B','')
    > Affected rows: 1
    > 时间: 0.009s

    如果你插入的值不在set之列,报错

    INSERT INTO test_enum_set VALUES('D','')
    > 1265 - Data truncated for column 'a' at row 1
    > 时间: 0s

    如果你插入的值不在enum之列,也报错

    INSERT INTO test_enum_set VALUES('C','人妖')
    > 1265 - Data truncated for column 'b' at row 1
    > 时间: 0s

    对于set而言,插入重复的会过滤掉,不然怎么能叫set呢

    INSERT INTO test_enum_set VALUES('A,A,A','')
    > Affected rows: 1
    > 时间: 0.008s

    数据类型存储要求

    数字类型前面已经提到了,这里不再赘述。

    时间类型

     枚举和集合类型

    如果你想要表格的文件,我已经打包好了:https://github.com/Mysakura/DataFiles

    那个 .pos 文件可以导入https://www.processon.com/ 来查看

  • 相关阅读:
    Linux工具之man手册彩色页设置
    使用bakefile编译C工程代码
    学会使用简单的 MySQL 常用操作
    Mysql数据库的通用安装方法
    从Mysql数据库中导入导出表结构
    CentOS下安装MySQL数据库
    lua函数调用
    innodb记录延迟删除对于其它DB操作的影响
    从apache派生cgi工作路径看软链接
    两台主机互为网关是否会像打乒乓球一样一直互发
  • 原文地址:https://www.cnblogs.com/LUA123/p/11459296.html
Copyright © 2020-2023  润新知