浅谈Mysql tinyint(1)与tinyint(4)的区别

作者:尖子塔 时间:2024-01-14 10:10:39 

引言

借由本篇文章来探讨下在Mysql数据库中数值类型tinyint(1)tinyint(4) 有啥区别呢?

什么是tinyint(M)?

先来了解下mysql中字符串类型varchar(M) 和数值类型tinyint(M) 的区别?
字符串列类型: varchar(M) 而言,M 是字段中可以存储的最大字符长度,也就是说是字段长度。根据设置,当你插入超出字段长度的数据时,你很可能会收到错误提示,即使没有收到错误提示,你插入的数据也会被自动截断以适应该字段的预定义长度。所以,varchar(20) 和 varchar(40) 是不同的,其真实反映了该字段可以存储的数据长度
数值列类型:其长度修饰符表示最大显示宽度,与该字段物理存储没有任何关系。也就是说,tinyint(1) 和 tinyint(4) 能够存储的数值范围都是-128…127 (or for unsigned values 0…255),他们是相同的数据类型,当然他们还是有一点差异,以下会有说明。
对于 tinyint 数据类型,只占 1 个字节

- 无符号的(unsigned),范围是 0 到 255,默认长度是 3。
- 有符号的(signed),范围是 -128 到 127,默认长度是 4。

范围算法:tinyint占1个字节,一个字节 8 位,也就是1*8=8,可以表示的数字个数是 2的 8 次方(2^8 = 256个数字)。

区别:若使用了 zerofill,当实际长度达不到指定的显示长度时,就会用 0 在前面补齐。(简记zerofill作用就是补零)

测试

先创建一张测试表,对 tinyint 类型都使用 zerofill。

CREATE TABLE `pre_demo` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
 `unsigned_t` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000',
 `signed_t` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000',
 `t1` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
 `t2` tinyint(2) unsigned zerofill NOT NULL DEFAULT '00',
 `t3` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000',
 `t4` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000',
 `t5` tinyint(5) unsigned zerofill NOT NULL DEFAULT '00000',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

然后,插入测试数据。

NSERT INTO pre_demo VALUES(NULL,8,8,8,8,8,8,8);
INSERT INTO pre_demo VALUES(NULL,123,123,123,123,123,123,123);

最后,查询数据表中的数据。

mysql> SELECT * FROM pre_demo;
+----+------------+----------+-----+-----+-----+------+-------+
| id | unsigned_t | signed_t | t1  | t2  | t3  | t4   | t5    |
+----+------------+----------+-----+-----+-----+------+-------+
|  1 |        008 |     0008 |   8 |  08 | 008 | 0008 | 00008 |
|  2 |        123 |     0123 | 123 | 123 | 123 | 0123 | 00123 |
+----+------------+----------+-----+-----+-----+------+-------+
2 rows in set (0.00 sec)
mysql> SELECT *,LENGTH(id),LENGTH(unsigned_t),LENGTH(t1) FROM pre_demo;
+----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+
| id | unsigned_t | signed_t | t1  | t2  | t3  | t4   | t5    | LENGTH(id) | LENGTH(unsigned_t) | LENGTH(t1) |
+----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+
|  1 |        008 |     0008 |   8 |  08 | 008 | 0008 | 00008 |          1 |                  3 |          1 |
|  2 |        123 |     0123 | 123 | 123 | 123 | 0123 | 00123 |          1 |                  3 |          3 |
+----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+
2 rows in set (0.00 sec)

来源:https://huaweicloud.csdn.net/63357991d3efff3090b58552.html

标签:Mysql,tinyint(1),tinyint(4)
0
投稿

猜你喜欢

  • PHP函数原理理解详谈

    2023-06-04 01:56:59
  • 面试官常问之说说js中var、let、const的区别

    2024-05-09 15:06:58
  • Python字符串hashlib加密模块使用案例

    2023-08-02 12:06:24
  • Python爬虫信息输入及页面的切换方法

    2023-08-02 17:33:33
  • 最新Python idle下载、安装与使用教程图文详解

    2022-08-27 12:33:15
  • Python利用DNN实现宝石识别

    2023-08-07 05:49:18
  • python获取mp3文件信息的方法

    2023-12-18 19:49:11
  • python中 _、__、__xx__()区别及使用场景

    2021-07-28 06:10:48
  • vue中异步数据获取方式(确保数据被获取)

    2024-05-09 15:23:07
  • 基于prototype扩展的JavaScript常用函数库

    2023-08-24 15:09:57
  • 如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图

    2021-09-28 18:01:30
  • Python实现方便使用的级联进度信息实例

    2021-04-22 12:31:18
  • PHP session反序列化漏洞深入探究

    2023-05-30 04:53:04
  • Python 操作 MongoDB 讲解详细

    2021-11-28 10:00:46
  • python异常中else的实例用法

    2021-02-05 06:18:56
  • Golang中的错误处理的示例详解

    2024-02-05 03:54:44
  • PyQt5结合matplotlib绘图的实现示例

    2023-12-02 20:05:30
  • 关于WARNING:Ignoring invalid distribution -pencv-python....警告信息的处理方法(已解决!)

    2021-01-14 18:14:28
  • js 实现拖拽排序详情

    2024-06-07 15:24:23
  • Python语言异常处理测试过程解析

    2022-10-30 01:29:05
  • asp之家 网络编程 m.aspxhome.com