设计数据库表经常会默认显示int的长度11,重来没自己设置过,深究过,这次记录一下这个问题。
百度后看到的大神的文章,写的非常好我自己验证了一下,果然和大神写的一样。就偷懒附上大神的文章,感兴趣的可以直接看大神的操作。
https://www.cnblogs.com/chenmingjun/p/10556206.html
总结如下:
1、如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,如上述例子中的字段 b,插入数值 1 显示为00000000001,左边补了 10 个零直至长度达到 11 位;
2、设置字段的显示宽度并不限制字段存储值的范围,比如字段 d 设置为 int(5),但是仍然可以存储 1234567890 这个 10 位数字;
3、设置的字符宽度只对数值长度不满足宽度时有效,如 d 字段 int(5),插入 1 时,长度不足 5,因此在左边补充 4 个零直到 5 位,但是插入 1234567890 时超过了 5 位,这时的显示宽度就起不了作用了
脚本附上:
CREATE TABLE int_demo (
id INT(11) NOT NULL AUTO_INCREMENT,
a INT(11) NOT NULL,
b INT(11) UNSIGNED ZEROFILL NOT NULL,
c INT(5) DEFAULT NULL,
d INT(5) UNSIGNED ZEROFILL NOT NULL,
e INT(15) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO int_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1);
INSERT INTO int_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
INSERT INTO int_demo (a, b, c, d, e,big) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890,1234567890);
select * from int_demo;
navicat和dbeaver我都查询了,看不出来效果,最后在命令行下用mysql自己连接后,发现确实是填充了。
mysql> select * from int_demo;
+----+------------+-------------+------------+------------+------------+------------+
| id | a | b | c | d | e | big |
+----+------------+-------------+------------+------------+------------+------------+
| 1 | 1 | 00000000001 | 1 | 00001 | 1 | 0 |
| 2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 | 0 |
| 3 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 |
+----+------------+-------------+------------+------------+------------+------------+
3 rows in set (0.00 sec)
bigint是我自己测试又新增了字段。
mysql> desc int_demo;
+-------+---------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| a | int(11) | NO | | NULL | |
| b | int(11) unsigned zerofill | NO | | NULL | |
| c | int(5) | YES | | NULL | |
| d | int(5) unsigned zerofill | NO | | NULL | |
| e | int(15) | YES | | NULL | |
| big | bigint(2) | NO | | NULL | |
+-------+---------------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
分享到:
相关推荐
在本篇文章中我们给大家分享了关于MySQL中int、char以及varchar的性能对比的相关内容,有兴趣的朋友们学习下。
本文是我搜集的几个关于时间操作的函数,在mysql中经常有用整型存放日期的问题,如何将整型转换为日期型在网上特别难搜索,本文就提供此项功能。
mysql的配置文件 具体安装见:https://blog.csdn.net/qq_31787603/article/details/81206033
mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加...
mysql int和tinyint的区别.docx
导语 前两天看到的问题,展开写一下。 字节 ...先说明一下,在 MySQL 中的整数类型,可以分为 unsigned 和 signed 两种,即无符号和有符号,具体内容这里不展开。tinyint 的大小就是 1 byte,在 si
整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用。 1.整型分类及存储范围 整数类型 ...
刚接触 MySQL 的时候,我还以为 int(3) 占用的存储空间比 int(4) 要小, int(4) 占用的存储空间比 int(8) 小。 后来,参看 MySQL 手册,发现自己理解错了。 int(M): M indicates the maximum display width for ...
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
使用servlet,jdbc将mysql中数据显示在jsp页面中
一、date型转换成int型 UNIX_TIMESTAMP(‘1997-10-04 22:23:00’) =====> 875996580 二、int型转换成date型 FROM_UNIXTIME...以上就是小编为大家带来的mysql日期date型和int型互换的方法全部内容了,希望大家
主要介绍了MySQL数据库中把int转化varchar引发的慢查询 的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
php保存数据到mysql 打算在dao层进行数据入库前的清理,比如varchar进行trim,int进行intval。 有一天突然想起,php intval的取值范围与mysql的int类型一样吗? 查了一下,不一样…… ...
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...
mysql库文件和头文件,可以用VC调用库函数 #include "stdafx.h" #include "mysql.h" #include #include < list > #pragma comment(lib,"libmysql.lib") using namespace std; int main() { char strSQL[256] ...
示例 演示如何阅读MySQL的查询执行计划。先创建5张表,命令如下(各表的数据量为:t1...附件中的脚本是创建导出结果,下载后,直接在自己的测试数据库中执行“source test_env.sql”命令即可创建自己的mysql测试环境。