详解MySQL数据类型int(M)中M的含义


Posted in Python onNovember 20, 2016

介绍

MySQL 数据类型中的 integer types 有点奇怪。你可能会见到诸如:int(3)、int(4)、int(8) 之类的 int 数据类型。刚接触 MySQL 的时候,我还以为 int(3) 占用的存储空间比 int(4) 要小, int(4) 占用的存储空间比 int(8) 小。

后来,参看 MySQL 手册,发现自己理解错了。

int(M): M indicates the maximum display width for integer types.

在 integer 数据类型中,M 表示最大显示宽度。

原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。

另外,int(M) 只有跟 zerofill 结合起来,才能使我们清楚的看到不同之处。

mysql> drop table if exists t;
mysql> create table t(id int zerofill);
mysql> insert into t(id) values(10);
mysql> select * from t;
+------------+
| id   |
+------------+
| 0000000010 |
+------------+
mysql> alter table t change column id id int(3) zerofill;
mysql> select * from t;
+------+
| id |
+------+
| 010 |
+------+
mysql>
mysql> alter table t change column id id int(4) zerofill;
mysql> select * from t;
+------+
| id |
+------+
| 0010 |
+------+
mysql>
mysql> insert into t(id) values(1000000);
mysql> select * from t;
+---------+
| id  |
+---------+
| 0010 |
| 1000000 |
+---------+

从上面的测试可以看出,“(M)”指定了 int 型数值显示的宽度,如果字段数据类型是 int(4),则:当显示数值 10 时,在左边要补上 “00”;当显示数值 100 是,在左边要补上“0”;当显示数值 1000000 时,已经超过了指定宽度“(4)”,因此按原样输出。

在使用 MySQL 数据类型中的整数类型(tinyint、smallint、 mediumint、 int/integer、bigint)时,非特殊需求下,在数据类型后加个“(M)”,我想不出有何意义。

下面补充一下数据类型

1、整型

MySQL数据类型 含义(有符号)
tinyint(m) 1个字节 范围(-128~127)
smallint(m) 2个字节 范围(-32768~32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2147483648~2147483647)
bigint(m) 8个字节 范围(+-9.22*10的18次方)

取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。
int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个m有什么用。

2、浮点型(float和double)

MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节)  m总个数,d小数位
double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位

设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。

3、定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。

4、字符串(char,varchar,_text)

MySQL数据类型 含义
char(n)  固定长度,最多255个字符
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text  可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符

5、日期和时间数据类型

MySQL数据类型 含义
date  3字节,日期,格式:2014-09-18
time  3字节,时间,格式:08:42:30
datetime 8字节,日期时间,格式:2014-09-18 08:42:30
timestamp 4字节,自动存储记录修改的时间
year  1字节,年份

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
Python判断两个对象相等的原理
Dec 12 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
Python变量访问权限控制详解
Jun 29 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
关于sys.stdout和print的区别详解
Dec 05 Python
使用Python实现批量ping操作方法
May 06 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 Python
python制作websocket服务器实例分享
Nov 20 #Python
Flask框架的学习指南之用户登录管理
Nov 20 #Python
Flask框架的学习指南之制作简单blog系统
Nov 20 #Python
Flask框架的学习指南之开发环境搭建
Nov 20 #Python
Python 描述符(Descriptor)入门
Nov 20 #Python
独特的python循环语句
Nov 20 #Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 #Python
You might like
PHP连接access数据库
2008/03/27 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
js 操作css实现代码
2009/06/11 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
Javascript验证方法大全
2015/09/21 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
简洁的十分钟Python入门教程
2015/04/03 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python常用的爬虫技巧总结
2016/03/28 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
装修致歉信
2014/01/15 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
交通安全温馨提示语
2015/07/14 职场文书