tinyint

本文详细解析了MySQL中的整型(如TINYINT、INT)与VARCHAR类型的使用细节,特别是关于zerofill属性的作用及如何正确理解整型字段长度参数的实际意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

inyint(1)  和 tinyint(3) 没什么区别,占用字节都是一位,存储范围都是一样的

tinyint(3) zerofill ,当插入的数据少于3位的时候,左边自动补零,这才是限制显示长度

int(1) 和 tinyint(1) ,够用的情况下,优先选择tinyint(1),因为占字节少、节省空间。

tinyint一个字节   smallint  两个字节   MEDIUMINT三个字节  int 4个字节  BIGINT 8个字节。


但是,varchar(5)  这里的5 限制的是储存字符的个数,字符不分贵贱(不分 中文、英文、数字...)。

总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加zerofill,则它们没有什么区别.M不是用来限制int个数的.int(M)的最大值和最小值与undesigned有关,最下面那副图有说明.

mysql> create table t (t int(3) zerofill);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t set t = 10;
Query OK, 1 row affected (0.00 sec)

mysql> select * from t;
+——+
| t |
+——+
| 010 |
+——+
1 row in set (0.11 sec)

Zerofill with default width, the same as int(10):

mysql> create table t (t int zerofill);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t set t = 10;
Query OK, 1 row affected (0.02 sec)

mysql> select * from t;
+————+
| t |
+————+
| 0000000010 |
+————+
1 row in set (0.08 sec)

Without zerofill:

mysql> create table t (t int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t set t = 10;
Query OK, 1 row affected (0.01 sec)

mysql> select * from t;
+——+
| t |
+——+
| 10 |
+——+

1 row in set (0.00 sec) 



以上转载自 http://hi.baidu.com/nancy0754/blog/item/2f3ea13a957a27d7d5622535.html

1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是

-128到127

1.BIT[M]

位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1

2.TINYINT[(M)] [UNSIGNED] [ZEROFILL]  M默认为4

很小的整数。带符号的范围是-128到127。无符号的范围是0到255。

3. BOOL,BOOLEAN

是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。

4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6

小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。

5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9

中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。

6. INT[(M)] [UNSIGNED] [ZEROFILL]   M默认为11

普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。

7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20

大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。

注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。

其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个长度,当你不足3位时,会帮你不全,当你超过3位时,就没有任何的影响。

前天组管问我 int(10)与int(11)有什么区别,当时觉得就是长度的区别吧,现在看,他们之间除了在存储的时候稍微有点区别外,在我们使用的时候是没有任何区别的。int(10)也可以代表2147483647这个值int(11)也可以代表。

要查看出不同效果记得在创建类型的时候加 zerofill这个值,表示用0填充,否则看不出效果的。

我们通常在创建数据库的时候都不会加入这个选项,所以可以说他们之间是没有区别的。


### TinyInt 与 Int 数据类型的差异及适用场景 #### 差异分析 TinyInt 和 Int 是 SQL 中常用的两种整数类型,它们的主要区别在于存储范围和占用的空间大小。 - **TinyInt**: 这是一种非常小的整数类型,在 MySQL 中默认占 1 字节 (8 位),其取值范围为 -128 到 127(如果有符号 signed),或者 0 到 255(如果是无符号 unsigned)。由于它的存储空间较小,适用于只需要存储少量数值的情况[^4]。 - **Int**: 它是一个标准的整数类型,默认情况下占据 4 字节 (32 位)。有符号的情况下,它可以表示从 -2,147,483,648 到 2,147,483,647 的范围;如果是无符号,则可以从 0 表示到 4,294,967,295。相比 TinyInt,它能够容纳更大的数值,适合更广泛的业务需求。 #### 存储效率对比 当设计数据库表结构时,选择合适的数据类型不仅影响性能还涉及磁盘空间利用率。对于那些仅需保存极小范围内数值字段来说,选用 TinyInt 能够有效减少每条记录所消耗内存/硬盘资源量从而提高整体 I/O 效率。然而如果预计未来该列可能扩展至较大数值则应考虑使用 Int 或其他更大容量的数据类型以避免后期修改带来的麻烦。 #### 使用建议 基于上述特性,以下是两者具体应用场景推荐: - 如果某属性只存在有限几个离散状态选项(如性别编码男女),那么采用 TINYINT 就足够满足需求并节省储存成本; - 对于需要表达广泛连续区间内的任意正负整数值情形下,int 更加适合作为主键ID自增序列或是计数器等功能角色. ```sql CREATE TABLE example ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, status TINYINT NOT NULL DEFAULT '0' ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值