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
参数(注意区分大消息,否则不生效),示例:
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