mysql中整数数据类型tinyint怎么使用
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容主要讲解"mysql中整数数据类型tinyint怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"mysql中整数数据类型tinyint怎么使
千家信息网最后更新 2025年02月05日mysql中整数数据类型tinyint怎么使用
本篇内容主要讲解"mysql中整数数据类型tinyint怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"mysql中整数数据类型tinyint怎么使用"吧!
1.1 tinyint类型说明
数据类型 | 显示长度 | 占用字节 | 有符号 | 无符号 |
---|---|---|---|---|
tinyint | 加上unsigned/zerofill:3 不加unsigned/zerofill:4 | 1(8bit) | -128至127 | 0至255 |
#### 格式id tinyint(M) [unsigned] [zerofill]字段名 数据类型(显示长度,不指定指定) 无符号 无符号且前导零填充#### 关于tinyint最大数值是怎样得来的tinyint占用1字节,1字节占用8位,经过换算(2的8次方减1)就是255;#### 关于加上unsigned后的说明加上unsigned属性后就是无符号(范围是0~255的整数,因为是整数,不会有符号"-",所以就是无符号)#### 关于加上zerofill后的说明zerofill属性会把unsigned属性也给带上,这样就是无符号(范围是0~255,显示长度就是3),同时还会进行前导零填充(没有达到显示长度的数值,例如:你插入1,显示的是001)。#### 不加unsigned和zerofill的说明字段后面不加上这两个属性中的任何一个,就表示是有符号(范围是-128~127,因为有符号"-",所有是有符号)。
1.2 实践环境说明
#### 数据库版本和默认的存储引擎mysql> select @@version,@@default_storage_engine;+------------+--------------------------+| @@version | @@default_storage_engine |+------------+--------------------------+| 5.7.28-log | InnoDB |+------------+--------------------------+1 row in set (0.00 sec) #### 创建chenliang库mysql> create database if not exists chenliang;Query OK, 1 row affected (0.03 sec) mysql> show databases like "chenliang";+----------------------+| Database (chenliang) |+----------------------+| chenliang |+----------------------+1 row in set (0.03 sec) #### 进入chenliang库,并查看是否成功进入到库下面mysql> use chenliang;Database changed mysql> select database();+------------+| database() |+------------+| chenliang |+------------+1 row in set (0.01 sec)#### 查看事务是否自动提交mysql> select @@global.autocommit;+---------------------+| @@global.autocommit |+---------------------+| 1 |+---------------------+1 row in set (0.00 sec)
1.3 加unsigned属性
1.3.1 SQL模式开启严格模式
SQL_MODE中开启了严格模式,即SQL_MODE参数中包含STRICT_TRANS_TABLES参数
#### 设置会话模式下的sql_mode中包含strict_trans_tablesmysql> set session sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";Query OK, 0 rows affected (0.00 sec) mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec)#### 创建test1测试表(这里指定了UNSIGNED,也就是无符号)mysql> CREATE TABLE IF NOT EXISTS test1( -> id tinyint UNSIGNED -> )engine=innodb character set utf8 collate utf8_general_ci;Query OK, 0 rows affected (0.06 sec) ## id字段类型是tinyint unsigned,范围就是0~255,其长度是3;因为255的长度是3;#### 查看test1表的表结构mysql> desc test1;+-------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+-------+| id | tinyint(3) unsigned | YES | | NULL | |+-------+---------------------+------+-----+---------+-------+1 row in set (0.03 sec)#### 测试插入范围0~255范围整数和不在该范围内的整数mysql> insert into test1 values(-1); # 插入数值-1,错误(不在0~255范围内)ERROR 1264 (22003): Out of range value for column 'id' at row 1 mysql> insert into test1 values(0); # 插入数值0,正常(在0~255范围内)Query OK, 1 row affected (0.06 sec) mysql> insert into test1 values(255); # 插入数值255,正常(在0~255范围内)Query OK, 1 row affected (0.05 sec) mysql> insert into test1 values(256); # 插入数值256,错误(不在0~255范围内)ERROR 1264 (22003): Out of range value for column 'id' at row 1mysql> select * from test1;+------+| id |+------+| 0 || 255 |+------+2 rows in set (0.00 sec)
1.3.2 SQL模式未开启严格模式
SQL_MODE未开启严格模式,即SQL_MODE参数中不包含STRICT_TRANS_TABLES参数
#### 设置会话模式下sql_mode中不包含strit_trans_tables变量mysql> set session sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode: NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec)#### 创建test11表(这里指定了UNSIGNED,也就是无符号)mysql> create table if not exists test11( -> id tinyint unsigned -> )engine=innodb character set utf8 collate utf8_general_ci;Query OK, 0 rows affected (0.00 sec) ## id字段类型是tinyint unsigned,范围就是0~255,其长度是3;因为255的长度是3;#### 查看test11表的表结构mysql> desc test11;+-------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+-------+| id | tinyint(3) unsigned | YES | | NULL | |+-------+---------------------+------+-----+---------+-------+1 row in set (0.00 sec)#### 测试插入范围0~255范围整数和不在该范围内的整数mysql> insert into test11(id) values(-1);Query OK, 1 row affected, 1 warning (0.00 sec) ## 不在范围内,插入没有报错(因为sql_mode中没有开启严格模式) ## 插入到表中的数据不是-1,而是0 mysql> insert into test11(id) values(0);Query OK, 1 row affected (0.01 sec) ## 没报错,因为在范围内,插入到表中的也是0 mysql> insert into test11(id) values(255);Query OK, 1 row affected (0.01 sec) ## 没报错,因为在范围内,插入到表中的也是255 mysql> insert into test11(id) values(256);Query OK, 1 row affected, 1 warning (0.00 sec) ## 不在范围内,插入没有报错(因为sql_mode中没有开启严格模式) ## 插入到表中的数据不是256,而是255 mysql> select * from test11;+------+| id |+------+| 0 || 0 || 255 || 255 |+------+4 rows in set (0.00 sec)
1.4 加zerofill属性
1.4.1 SQL模式开启严格模式
SQL_MODE中开启了严格模式,即SQL_MODE参数中包含STRICT_TRANS_TABLES参数
## 设置会话模式下的sql_mode中包含strict_trans_tablesmysql> set session sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";Query OK, 0 rows affected (0.00 sec) mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec) ## 创建test2测试表(这里指定了zerofill,会前导零填充,同时还会带上unsigned)mysql> CREATE TABLE IF NOT EXISTS test2( -> id tinyint zerofill -> )engine=innodb character set utf8 collate utf8_general_ci;Query OK, 0 rows affected (0.01 sec) ## id字段类型是tinyint zerofill,范围就是0~255,其长度是3;因为255的长度是3; ## 查看test2表的表结构mysql> desc test2;+-------+------------------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------------------------+------+-----+---------+-------+| id | tinyint(3) unsigned zerofill | YES | | NULL | |+-------+------------------------------+------+-----+---------+-------+1 row in set (0.00 sec) ## 测试插入范围0~255范围整数和不在该范围内的整数mysql> insert into test2 values(-1); # 插入数值-1,错误(不在0~255范围内)ERROR 1264 (22003): Out of range value for column 'id' at row 1 mysql> insert into test2 values(0); # 插入数值0,正常(在0~255范围内)Query OK, 1 row affected (0.06 sec) mysql> insert into test2 values(255); # 插入数值255,正常(在0~255范围内)Query OK, 1 row affected (0.05 sec) mysql> insert into test2 values(256); # 插入数值256,错误(不在0~255范围内)ERROR 1264 (22003): Out of range value for column 'id' at row 1 mysql> select * from test2;+------+| id |+------+| 000 || 255 |+------+2 rows in set (0.00 sec)
1.4.2 SQL模式未开启严格模式
SQL_MODE未开启严格模式,即SQL_MODE参数中不包含STRICT_TRANS_TABLES参数
## 设置会话模式下sql_mode中不包含strit_trans_tables变量mysql> set session sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode: NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec)## 创建test22表(这里指定了zerofill,会前导零填充,同时还会带上unsigned)mysql> create table if not exists test22( -> id tinyint zerofill -> )engine=innodb character set utf8 collate utf8_general_ci;Query OK, 0 rows affected (0.00 sec) ## id字段类型是tinyint unsigned,范围就是0~255,其长度是3;因为255的长度是3; ## 查看test22表的表结构mysql> desc test22;+-------+------------------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------------------------+------+-----+---------+-------+| id | tinyint(3) unsigned zerofill | YES | | NULL | |+-------+------------------------------+------+-----+---------+-------+1 row in set (0.00 sec) ## 测试插入范围0~255范围整数和不在该范围内的整数mysql> insert into test22(id) values(-1);Query OK, 1 row affected, 1 warning (0.00 sec) ## 不在范围,插入没报错(因为sql_mode中没有开启严格模式); ## 但到表中的不是-1,而是0,但因为有zerofill参数,所以显示时会前导零序填充; mysql> insert into test22(id) values(0);Query OK, 1 row affected (0.01 sec) ## 没报错,因为在范围内,插入到表中的也是0 mysql> insert into test22(id) values(255);Query OK, 1 row affected (0.01 sec) ## 没报错,因为在范围内,插入到表中的也是255 mysql> insert into test22(id) values(256); Query OK, 1 row affected, 1 warning (0.00 sec) ## 不在范围,插入没报错(sql_mode中没有开启严格模式) ## 但到表中的数据不是256,而是255 mysql> select * from test22;+------+| id |+------+| 000 || 000 || 255 || 255 |+------+4 rows in set (0.00 sec)
1.5 不加unsigned和zerofill属性
1.5.1 SQL模式开启严格模式
SQL_MODE中开启了严格模式,即SQL_MODE参数中包含STRICT_TRANS_TABLES参数
## 设置会话模式下的sql_mode中包含strict_trans_tablesmysql> set session sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";Query OK, 0 rows affected (0.00 sec) mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec) ## 创建test3表(不加unsigned和zerofill)mysql> CREATE TABLE test3( -> id tinyint -> )engine=innodb character set utf8 collate utf8_general_ci;Query OK, 0 rows affected (0.06 sec) ## id字段的类型为tinyint,其范围是-128至127,其显示长度是4,因为要显示符号("-") ## 查看test3表的表结构mysql> desc test3;+-------+------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------+------+-----+---------+-------+| id | tinyint(4) | YES | | NULL | |+-------+------------+------+-----+---------+-------+1 row in set (0.01 sec) ## 测试插入-128~127范围的整数和不在该范围内的整数mysql> insert into test3(id) values(-129); # 插入数值-129,错误,不在范围内ERROR 1264 (22003): Out of range value for column 'id' at row 1 mysql> insert into test3(id) values(-128); # 插入数值-128,正确,在范围内Query OK, 1 row affected (0.00 sec)mysql> insert into test3(id) values(127); # 插入数值127,正确,在范围内Query OK, 1 row affected (0.01 sec) mysql> insert into test3(id) values(128); # 插入数值128,错误,不在范围内ERROR 1264 (22003): Out of range value for column 'id' at row 1 mysql> select * from test3;+------+| id |+------+| -128 || 127 |+------+2 rows in set (0.00 sec)
1.5.2 SQL模式未开启严格模式
SQL_MODE中未开启严格模式,即SQL_MODE参数中不包含STRICT_TRANS_TABLES参数
## 设置会话模式下sql_mode中不包含strit_trans_tables变量mysql> set session sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> select @@sql_mode\G*************************** 1. row ***************************@@sql_mode: NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec) ## 创建test33表(不加unsigned和zerofill)mysql> CREATE TABLE test33( -> id tinyint -> )engine=innodb character set utf8 collate utf8_general_ci;Query OK, 0 rows affected (0.00 sec) ## id字段的类型为tinyint,其范围是-128至127,其显示长度是4,因为要显示符号("-") ## 查看test33表的表结构mysql> desc test33;+-------+------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------+------+-----+---------+-------+| id | tinyint(4) | YES | | NULL | |+-------+------------+------+-----+---------+-------+1 row in set (0.00 sec) ## 测试插入-128~127范围的整数和不在该范围内的整数mysql> insert into test33(id) values(-129);Query OK, 1 row affected, 1 warning (0.00 sec) ## 不在范围内,插入未报错,因为sql_mode中没有开启严格模式 ## 插入到表中的不是-129,而是-128; mysql> insert into test33(id) values(-128);Query OK, 1 row affected (0.01 sec) ## 在范围内,插入不报错,插入的是多少就是多少 mysql> insert into test33(id) values(127);Query OK, 1 row affected (0.00 sec) ## 在范围内,插入不报错,插入的是多少就是多少 mysql> insert into test33(id) values(128);Query OK, 1 row affected, 1 warning (0.01 sec) ## 不在范围内,插入未报错,因为sql_mode中没有开启严格模式 ## 插入到表中的不是128,而是127; mysql> select * from test33;+------+| id |+------+| -128 || -128 || 127 || 127 |+------+4 rows in set (0.00 sec)
到此,相信大家对"mysql中整数数据类型tinyint怎么使用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
范围
模式
整数
符号
数值
长度
参数
类型
就是
数据
字段
测试
属性
结构
而是
错误
中包
前导
变量
同时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
免费开放法律法规数据库
软件开发岗前培训记录
连接入口服务器失败
使用数据库高中信息技术课件
泰拉瑞亚50人服务器怎么登录
佳妮曼网络技术服务有限公司
java消息服务器
机顶盒ntp服务器连接异常
网络安全什么梗
随机点数大师数据库
软件开发转型需求
设计软件开发公司有哪些
如何开启服务器在线人数
数据库怎么分析实体的联想
dnf服务器繁忙
不可爬取的数据库
荒野乱斗怎么退出服务器
棒的眼镜行业软件开发
网络安全体系结构的设计目的
江苏网络营销软件开发价格
服务器连存储设备
安徽网络安全比较强的学校
华为运营商广西网络技术支持
ipran专网网络安全方案
服务器无返回数据
密云区环保软件开发调试
定时器数据库数据同步
武汉禹成互联网科技有限公司
数据库 重复数据
ega数据库