tinyint 类型

-2^7(-128)2^7 - 1 (127) 的整型数据。

存储大小为 **1** 个字节,对应 Java 的 byte。

无符号(unsigned)形式的范围是从 0 到 255 的整型数据。

所以建表的时候只能是 tinyint(3),哪怕你建 tinyint(100),他最大还是3位这么多。

smallint 类型

-2^15 (-32,768)2^15 - 1 (32,767) 的整型数据。

存储大小为 **2** 个字节,对应 Java 的 short。

无符号(unsigned)形式的范围是从 0 到 65535 的整型数据。

所以建表的时候只能是 smallint(5),哪怕你建 smallint(100) ,他最大还是5位这么多。

int 类型

-2^31 (-2,147,483,648)2^31 - 1 (2,147,483,647) 的整型数据。

存储大小为 **4** 个字节,对应 Java 的 int。

无符号(unsigned)形式的范围是从 0 到 4294967296 的整型数据。

所以建表的时候只能是 int(10),哪怕你建 int(100),他最大还是10位这么多。

bigint 类型

-2^63 (-9,223,372,036,854,775,808)2^63-1 (9,223,372,036,854,775,807) 的整型数据(所有数字)。

存储大小为 **8** 个字节,对应 Java 的 Long。

无符号(unsigned)形式的范围是是……(自己算吧)

所以建表的时候只能是 bigint(20), 哪怕你建 bigint(100),他最大还是20位这么多.

选择合适的存储类型

另外,建表示应使用合适的存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

示例:如下表,其中无符号值可以避免误存负数,且扩大了表示范围。

对象 年龄区间 类型 字节 表示范围
150 岁之内 unsigned tinyint 1 无符号值:0 到 255
数百岁 unsigned smallint 2 无符号值:0 到 65535
恐龙化石 数千万年 unsigned int 4 无符号值:0 到约 42.9 亿
太阳 约 50 亿年 unsigned bigint 8 无符号值:0 到约 10 的 19 次方

在建表时经常使用数据类型 unsigned tinyint(1) 进行表示某些状态,如:is_deleted

但是,在使用 Mybatis Generator 转 JAVA 类型时经常会被转换为 Boolean 。在某些情况下不符合我们的预期,为此我们可以在设置 jdbc 连接时指定配置:

tinyInt1isBit=false 参数(注意区分大消息,否则不生效),示例:

  1. jdbc:mysql://${host}:{port}/${db.mysql.db}?tinyInt1isBit=false

有关更多的配置可以在 MySQL 官网文档中查阅:

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html