详解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 相关文章推荐
django基础之数据库操作方法(详解)
May 24 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
python多线程http压力测试脚本
Jun 25 Python
python视频按帧截取图片工具
Jul 23 Python
python实现邮件发送功能
Aug 10 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
提升python处理速度原理及方法实例
Dec 25 Python
40个你可能不知道的Python技巧附代码
Jan 29 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
django上传文件的三种方式
Apr 29 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
默默简单的写了一个模板引擎
2007/01/02 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
JS 继承实例分析
2008/11/04 Javascript
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
python3.4爬虫demo
2019/01/22 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
python3 使用traceback定位异常实例
2020/03/09 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
地理教师岗位职责
2014/03/16 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers