mysql整数数据类型深入解析

2023年 4月 22日 53.9k 0

此处我们给int char没有给出他们的宽度,系统默认会给它分配一个宽度。 M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关 我们来进行下试

此处我们给int char没有给出他们的宽度,系统默认会给它分配一个宽度。M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关我们来进行下试验复制代码 代码如下:mysql(root@localhost:test 03:19:00)>create table c (-> id int not null,-> name char not null);Query OK, 0 rows affected (0.25 sec)mysql(root@localhost:test 03:19:34)>desc c;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| id | int(11) | NO | | NULL | || name | char(1) | NO | | NULL | |+-------+---------+------+-----+---------+-------+2 rows in set (0.00 sec)那么我们可以看到这里,系统会自动为我们的数据类型给出一个默认的宽带值,这里这个宽度值其实只有在zerofill的作用下才能起到一定的作用。在下面我们看下其他的默认值是多少, 复制代码 代码如下:mysql(root@localhost:test 03:34:53)>alter table c modify id smallint;Query OK, 0 rows affected (0.05 sec)Records: 0 Duplicates: 0 Warnings: 0mysql(root@localhost:test 03:39:39)>desc c;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | smallint(6) | YES | | NULL | || name | varchar(10) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+2 rows in set (0.00 sec)mysql(root@localhost:test 03:39:44)>alter table c modify id bigint;Query OK, 4 rows affected (0.23 sec)Records: 4 Duplicates: 0 Warnings: 0mysql(root@localhost:test 03:40:12)>desc c;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | bigint(20) | YES | | NULL | || name | varchar(10) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+2 rows in set (0.01 sec)这里我们再来看下当插入值大于数据类型的取值范围的情况: 复制代码 代码如下:mysql(root@localhost:test 03:25:58)>insert into c values(300,'chen');Query OK, 1 row affected, 2 warnings (0.08 sec)mysql(root@localhost:test 03:26:20)>show warnings;+---------+------+---------------------------------------------+| Level | Code | Message |+---------+------+---------------------------------------------+| Warning | 1264 | Out of range value for column 'id' at row 1 || Warning | 1265 | Data truncated for column 'name' at row 1 |+---------+------+---------------------------------------------+2 rows in set (0.00 sec)mysql(root@localhost:test 03:26:27)>select * from c;+------+------+| id | name |+------+------+| 127 | c |+------+------+1 row in set (0.02 sec)mysql(root@localhost:test 03:26:40)>insert into c values(320,'chen');Query OK, 1 row affected, 2 warnings (0.05 sec)mysql(root@localhost:test 03:26:53)>select * from c;+------+------+| id | name |+------+------+| 127 | c || 127 | c |+------+------+2 rows in set (0.00 sec)这里的tinyint是占有一个字节,就是可以表示从0-255这个范围的整数,可是这里为什么直到127呢,原因是我们没有给他设定无符号类型的。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论