zoukankan      html  css  js  c++  java
  • 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/ 来查看

  • 相关阅读:
    eclipse中的项目无法在build/classes目录下生成.class字节码
    nginx的权限问题(Permission denied)解决办法
    application/x-www-form-urlencoded、application/json、multipart/form-data、text/xml简单总结
    jackson的使用和详解
    博客园自定义样式
    java基础
    k8s
    系统服务构建运维
    私有云技术
    工程文档编写
  • 原文地址:https://www.cnblogs.com/LUA123/p/11459296.html
Copyright © 2011-2022 走看看