美文网首页
MySQL 中 TINYINT[(M)] 的含义

MySQL 中 TINYINT[(M)] 的含义

作者: CHMAX | 来源:发表于2020-11-17 20:27 被阅读0次

首先,我们来创建一个测试表。

mysql> create table test (var1 boolean, var2 tinyint, var3 tinyint(8));
Query OK, 0 rows affected (0.01 sec)

mysql> show create table test;
+-------+--------------------------------------------------------------------+
| Table | Create Table                                                       |
+-------+--------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `var1` tinyint(1) DEFAULT NULL,
  `var2` tinyint(4) DEFAULT NULL,
  `var3` tinyint(8) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

可以看到,表中三个字段的数据类型分别为 tinyint(1)tinyint(4)tinyint(8),那么它们之间有什么区别呢?

试着向表中添加一些数据看看。

mysql> insert into test values(0, 0, 0), (1, 1, 1), (100, 100, 100);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+------+------+------+
| var1 | var2 | var3 |
+------+------+------+
|    0 |    0 |    0 |
|    1 |    1 |    1 |
|  100 |  100 |  100 |
+------+------+------+
3 rows in set (0.01 sec)

可以看到,并没有啥区别,实际情况是,这些定义的类型之间确实没有啥区别,从数据角度上来看,它们是完全一样的!!!

类型中的 size 值,也就是 M 的值,该值最大为 255(试出来的),其作用其实是在展示时提示该值的长度。

但是,tinyint(1) 有点特殊,比如像 Connector/J 会将其当作 boolean 类型来处理,会将其值转换为 true 或者 false(非0为真)。

这种特性可以通过设置连接参数 tinyInt1isBit=false 来取消。

参考:

相关文章

网友评论

      本文标题:MySQL 中 TINYINT[(M)] 的含义

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