mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?
原先对mysql不太理解,但也没有报错。但理解的不够深入。这次补上。
原来以为int(11)是指11个字节,int(10)就是10个字节。我错了。
http://zhidao.baidu.com/link?url=puYWaGBQNKNHgffO5kdvXshF3KmX8OuB4Mor3HXapbNHa8m1CdlF8PJTqVuKa1eKcEd6Bv2NKUr3I-KJr5-7ISLhBsmf17Lu69vxv2aR99_
mysql的基本数据类型里几个int如下:
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 ( -2^15 :-32 768,2^15 - 1:32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER(int 的 SQL-92 同义字为 integer) 4 字节 (-2^31:-2 147 483 648, 2^31 - 1:2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-2^63:-9 233 372 036 854 775 808,2^63-1:9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
这些类型,是定长的,其容量是不会随着后面的数字而变化的,比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节。
那么后面的11和8,有啥用呢。
http://zhidao.baidu.com/link?url=b0Z-WIhggaErl3uhMrAhoEXQG_3zotyd7r31O3RXSYiFJo1Cad-NeWN8cFXZFI50yVG_lpKooT7OjLhIa20ephKFJYD-fV9ZAv_o63AfyVq
mysql数据库中以 :数据类型(m) 来约束数据,其中 数字m在不同的数据类型中表示含义是不同的。 咱们这里只讲整数。
整型数系统已经限制了取值范围,tinyint占1个字节、int占4个字节。所以整型数后面的m不是表示的数据长度,而是表示数据在显示时显示的最小长度。
tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符。
当字符长度超过(m)时,相当于啥都没发生;
当字符长度小于(m)时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充),
设置tinyint(2) zerofill 你插入1时他会显示01;设置tinyint(4) zerofill 你插入1时他会显示0001。
所以,没有zerofill,(m)就是无用的。
http://blog.csdn.net/phpwish/article/details/7845921
综上整型的数据类型括号内的数字不管是多少,所占的存储空间都固定的。
http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/25/2153016.html
mysql 中int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度,只有字段指定zerofill时有用。
位数限制基本没有意义。
在mysql中我做过实验,对于一个tinyint类型的字段,不管它是tinyint(1)还是tinyint(2)还是tinyint(3),
当你插入大于127的数,都会存入127。跟上文中的结论是一样的。
总结:int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数。这个东西基本没有意义,除非你对字段指定zerofill。
所以我们在设计mysql数据库时,
建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。
所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。
http://blog.csdn.net/longyulu/article/details/7326581
该文很好地总结了mysql所有的数据类型。
我在建一个float类型的字段时,故意建成float(2,3)型,是错误的。报错如下。
第一个数字M,代表总长度限制(总长度包括小数位和整数位),2代表总长度不能超过2个字符,比如2.34,就超过了2位总长度;
第二个数字D,代表小数位的长度限制。0.2表示占用了1个小数位。
这样看,当然M必需大于等于D。
比如设置为float(2,2),那么写入12.3这个数字时,实际插入的是0.99。
比如设置为float(2,1),那么写入12.3这个数字时,实际插入的是9.9。
mysql会自动截取该字段能接受的最大值存入。
那么设置为float(0,0),则相当于不受限制,或者说受float本身的精度限制。
对于mysql的浮点型,实在太复杂,没搞清,看这篇:http://www.jb51.net/article/31723.htm
再来看看mysql的整型、浮点型,怎么跟oracle的数据类型NUMBER对应的。
先来看看oracle的NUMBER类型的特点:
参考http://www.linuxidc.com/Linux/2012-02/54603.htm
Number(p, s) 声明一个定点数 p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,scale的取值范围为-84到127
Number(p) 声明一个整数 相当于Number(p, 0)
Number 声明一个浮点数 其精度为38,要注意的是scale的值没有应用,也就是说scale的值不能简单的理解为0,或者其他的数。
定点数的精度(p)和刻度(s)遵循以下规则:
当一个数的整数部分的长度 > p-s 时,Oracle就会报错。(可见s个位置是留给小数的;p-s个位置是留给整数部分的,这样很清晰啊。p代表整数位和小数位全部的长度限制,这一点跟mysql很像)
当一个数的小数部分的长度 > s 时,Oracle就会舍入。(同上,实际上不会报错,oracle会四舍五入,比如NUMBER(4,2),插入99.248,保存为99.25;插入99.242,保存为99.24;插入99.2448,保存为99.24而不是99.25,注意他四舍五入的位置是s位。)
当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。(暂时不管它)
当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入。(暂时不管它)
经实验,比如定义一个字段为Number(3),那么写入该字段,最多不能超过3个数字。比如,你可以插入999(或-999),但是不能插入1000(或-1000)。以此类推。
比如定义一个字段为Number(3,2),那么写入该字段,最多不能超过3位的整数,最多2位的小数。
综上,我们可以看出mysql和oracle的对应关系:
mysql | oracle | 理由 |
tinyint(1字节) 以及tinyint unsigned |
NUMBER(3) |
范围(-128,127) (0,255),所以至少NUMBER(3)对应。 但是不能NUBER(1),这样只能最大存9。 |
smallint(2字节) 以及smallint unsigned |
NUMBER(5) | 范围(-32 768,32 767) (0,65 535) ,所以至少NUMBER(5)对应。 |
MEDIUMINT(3字节) 以及 MEDIUMINT unsigned |
NUMBER(7) 以及 NUMBER(8) |
范围(-8 388 608,8 388 607) (0,16 777 215),所以 非unsigned用NUMBER(7)对应; unsigned用NUMBER(8)对应。 |
int(4字节) 以及 int unsigned |
NUMBER(10) |
范围(-2 147 483 648, 2 147 483 647) (0,4 294 967 295), 所以至少NUMBER(10)对应。 |
bigint(5字节) 以及bigint unsigned |
NUMBER(19) 以及 NUMBER(20) |
范围(-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615), 所以非unsigned用NUMBER(19)对应; unsigned用NUMBER(20)对应。 |
float(m,d) 以及 unsigned |
NUMBER(m,d) |
因为NUMBER(m,d)是定点数,精度超过浮点数。 所以只需保持位数一致即可,精度也会更强。 |
double(m,d) 以及 unsigned |
NUMBER(m,d) | 同上。 |
decimal(m,d) 以及 unsigned |
NUMBER(m,d) |
Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。 例:decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。 p (有效位数)必需是1~38之间的数。 |
ORACLE中有SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词。
mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?的更多相关文章
- mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?
原文地址: http://www.cnblogs.com/stringzero/p/5707467.html 原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int ...
- 学习计划 mysql 整数类型后面的数字,是什么意思?
Mysql中定义整数类型的数字,是指定这个字段的长度么? 比如 INT(10) 10代表10个字节么?还是只能存储10为长度的数字内容? 今天本来想学习下字符类型,一下子发现了这个,感觉好有趣. -- ...
- MYSQL中 ENUM 类型
MYSQL中 ENUM 类型的详细解释 ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串(&quo ...
- 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题
今天在做项目过程中,查询一个表中数据时总碰到这个问题: java.sql.SQLException:Value '0000-00-00' can not be represented as ...
- 解决python写入mysql中datetime类型遇到的问题
解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...
- mysql中geometry类型的简单使用
mysql中geometry类型的简单使用 编写本文的目的: 让和两天前的我一样的初学者,能够更快的使用geometry类型存储空间点数据 也是为了自己加深印象,更熟练的使用geometry类型 ...
- MYSQL中TIMESTAMP类型的默认值理解
MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间:表:----------- Table Create Table ...
- 一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.简述MySQL中索引类型对数据库的性能的影响 2.RDB和AOF机制 3.Redis的过期键的删除策略 4.Redis ...
- MySql中时间类型总结
最近建表要用到时间类型的数据,但对时间类型的数据一向不了解,就总结了一下.. 一.日期DATE 一个日期.支持的范围是“1000-01-01”以“9999-12-31”.MySQL显示日期用 “YYY ...
随机推荐
- Netty 核心内容之 编解码器
原文链接 Netty 核心内容之 编解码器 代码仓库地址 编解码器 我认为Netty 最棒的一点就是Netty 设计的编解码链,这一优秀的设计,可以很方便的实现二进制流->ByteBuf-> ...
- 谈下git的基本操作
在工作之后,我比较经常地接触git,关于git的用法,网上有很多的教程,而且git的指令是非常多的,强如阮一峰这样的高手也直言无法记住git的很多指令.实际上我也看了不少关于git指令的文章,个人觉得 ...
- 前端开发之基础知识-HTML(二)
1.6 html链接 html链接 <a>标签可以在网页上定义一个链接地址,通过src属性定义跳转的地址,通过title属性定义鼠标悬停时弹出的提示文字框. <a href=&quo ...
- 【Oracle RAC】Linux系统Oracle12c RAC安装配置详细记录过程V2.0(图文并茂)
[Oracle RAC]Linux系统Oracle12c RAC安装配置详细过程V2.0(图文并茂) 2 Oracle12c RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件下载3 ...
- 【转】Python之道
作者:Vamei 出处:http://www.cnblogs.com/vamei Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录于PEP 20. 语句执行之后,终端 ...
- Postgres 优雅存储树形数据
碰到一个树形数据需要存储再数据控制,碰到以下两个问题: 在PG数据库中如何表达树形数据 如何有效率的查询以任意节点为Root的子树 测试数据 为了更加简单一些,我们将使用一下数据 Section A ...
- mybatis insertUseGeneratedKeys 返回主键为null
package tk.mybatis.mapper.common.special; import org.apache.ibatis.annotations.InsertProvider; impor ...
- .NET core2.0 发布至IIS中
.NET CORE和asp.net 发布时不太一样,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角 ...
- UI自动化测试之Jenkins配置
前一段时间帮助团队搭建了UI自动化环境,这里将Jenkins环境的一些配置分享给大家. 背景: 团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化 ...
- linux cp 直接覆盖不提示信息 解决方法
默认情况下,cp覆盖时,无论加什么参数 -f 之类的 还是提示是否覆盖. 原因是:服务器会默认增加别名 alias cp=’cp -i’,当你执行cp时,其实执行的是cp –i. [root@ltt0 ...