mysql中int(1)和int(11)区别详解

mysql字段定义中INT(x)中的x仅仅指的是显示宽度。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。所以x的定义与存储空间没有任何关系都是4个字节。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型 字节 最小值 最大值
    (带符号的/无符号的) (带符号的/无符号的)
TINYINT 1 -128 127
    0 255
SMALLINT 2 -32768 32767
    0 65535
MEDIUMINT 3 -8388608 8388607
    0 16777215
INT 4 -2147483648 2147483647
    0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
    0 18446744073709551615

1). int(10), 这个10 会被放在result set的metadata里, 返回给应用程序. 应用程序可以在不足10位的情况下 左填充, 默认填充空格.

2). 加上zerofill, 填充0.

mysql> create table ccc(a int(4), b int(20), c int(20) zerofill);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into ccc values(4342343, 342, 342342);
Query OK, 1 row affected (0.00 sec)

mysql> select * from ccc;
+---------+------+----------------------+
| a       | b    | c                    |
+---------+------+----------------------+
| 4342343 |  342 | 00000000000000342342 |
+---------+------+----------------------+
1 row in set (0.00 sec)

可以看到, 我们要求b左填充空格, 但程序选择不去填充.

如果给字段添加可选项ZEROFILL时,就更明显了。因为它会将默认补充的空格用零代替。

//INT(4) UNSIGNED ZEROFILL
0001
0002
...
0099
...
0999
...
9999
...
10000
 
//INT(2) UNSIGNED ZEROFILL
01
02
...
09
...
99
...
100

 如果不带ZEROFILL选项,那么左侧就会以空格填充

//INT(4)
   1
   2
...
  99
...
 999
...
9999
...
10000
 
//INT(2)
 1
 2
...
 9
...
99
...
100

下面补充一下

Mysql类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。

所以int(10)与int(11)后的括号中的字符表示显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,int类型的字段能存储的数据上限还是2147483647(有符号型)和4294967295(无符号型)。

浮点和定点类型也可以为UNSIGNED。同数类型,该属性防止负值保存到列中。然而,与整数类型不同的是,列值的上范围保持不变。

如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性。

对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。

FLOAT类型用于表示近似数值数据类型。SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定。0到23的精度对应FLOAT列的4字节单精度。24到53的精度对应DOUBLE列的8字节双精度。

MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。

MySQL将DOUBLE视为DOUBLE PRECISION(非标准扩展)的同义词。MySQL还将REAL视为DOUBLE PRECISION(非标准扩展)的同义词,除非SQL服务器模式包括REAL_AS_FLOAT选项。

为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLE PRECISION,不规定精度或位数。

DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:

salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。

在MySQL 5.1中以二进制格式保存DECIMAL和NUMERIC值。

标准SQL要求salary列能够用5位整数位和两位小数保存任何值。因此,在这种情况下可以保存在salary列的值的范围是从-999.99到999.99。

在标准SQL中,语法DECIMAL(M)等价于DECIMAL(M,0)。同样,语法DECIMAL等价于DECIMAL(M,0),可以通过计算确定M的值。在MySQL 5.1中支持DECIMAL和NUMERIC数据类型的变量形式。M默认值是10。

DECIMAL或NUMERIC的最大位数是65,但具体的DECIMAL或NUMERIC列的实际范围受具体列的精度或标度约束。如果此类列分配的值小数点后面的位数超过指定的标度允许的范围,值被转换为该标度。(具体操作与操作系统有关,但一般结果均被截取到允许的位数)。

BIT数据类型可用来保存位字段值。BIT(M)类型允许存储M位值。M范围为1到64。

要指定位值,可以使用b’value’符。value是一个用0和1编写的二进制值。例如,b’111′和b’100000000′分别表示7和128。

时间: 2024-09-13 07:02:33

mysql中int(1)和int(11)区别详解的相关文章

MYsql中NULL与空字符串空区别详解

对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL与MySQL空字符串是相同的事.情况并非如此.例如,下述语句是完全不同的:MySQL> INSERT INTO my_table (phone) VALUES (NULL);  代码如下 复制代码 mysql> INSERT INTO my_table (phone) VALUES ('');   这两条语句均会将值插入phone(电话)列,但第1条语句插入的是NULL值,第2条语句插入的是空字符串.第1种情况的含义可被解释为

MySQL 中修改密码及访问限制设置详解

mysql|访问|详解 MySQL中修改密码及访问限制设置详解 MySQL是一个真正的多用户.多线程SQL数据库服务器.MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成.由于其源码的开放性及稳定性,且与网站流行编?挥镅?PHP的完美结合,现在很多站点都利用其当作后端数据库,使其获得了广泛应用.处于安全方面的考虑,需要为每一用户赋于对不同数据库的访问限制,以满足不同用户的要求.下面就分别讨论,供大家参考. 一.MySQL修改密码方法总结 首

C#中string.Empty和null的区别详解

  这篇文章主要介绍了C#中string.Empty和null的区别详解,本文同时讲解了空字符串和Empty的区别以及string.Empty与null的区别,需要的朋友可以参考下 这是一个及其常见的问题,网上已经有关于这个问题的很多讨论.但是我觉得都是不求甚解,有一些还是在误导别人.下面我来说下我对这三者的理解,如有错误的地方请大家及时指正. 一:""与string.Empty我认为是一样的.网上有一篇被转载了几十遍的文章是这样说的string.Empty 不分配存储空间,"

JQuery中$.each 和$(selector).each()的区别详解

 这篇文章主要介绍了JQuery中$.each 和$(selector).each()的区别详解,本文给出了多个例子讲解了它们之间的不同之处,需要的朋友可以参考下     一个通用的遍历函数 , 可以用来遍历对象和数组. 数组和含有一个length属性的伪数组对象 (伪数组对象如function的arguments对象)以数字索引进行遍历,从0到length-1, 其它的对象通过的属性进行遍历. $.each()与$(selector).each()不同, 后者专用于jquery对象的遍历, 前

JSP中include指令和动作及区别详解

先来看看语法及比较 //include_ <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.get

mysql中having和group by命令使用详解

利用 Mysql 中的的聚合函数 count(*) 可以实现这个功能,例如需要查询 user 表中 name 出现次数最多的记录,可以先按照 group by name 分组,用 count 算出分组里的条数,再按照 count 排序,SQL语句如下: select name,count(*) from user group by name order by count(*) DESC limit 1; 不加limit限制将返回按照name重复次数排列的数据. 在使用聚合函数之前,我们可以通过

解析C++中四种强制类型转换的区别详解_C 语言

C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型.那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换.C++中风格是static_cast<type>(content).C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干

MySQL中修改密码及访问限制设置详解

mysql|访问|详解 MySQL是一个真正的多用户.多线程SQL数据库服务器.MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成.由于其源码的开放性及稳定性,且与网站流行编徎语言PHP的完美结合,现在很多站点都利用其当作后端数据库,使其获得了广泛应用.处于安全方面的考虑,需要为每一用户赋于对不同数据库的访问限制,以满足不同用户的要求.下面就分别讨论,供大家参考. 一.MySQL修改密码方法总结首先要说明一点的是:一般情况下,修改MySQL

java中public class与class的区别详解

以下是对java中public class与class的区别进行了分析介绍,需要的朋友可以过来参考下   在编写类的时候可以使用两种方式定义类:public class定义类: class定义类:如果一个类声明的时候使用了public class进行了声明,则类名称必须与文件名称完全一致.范例:定义一个类(文件名称为:Hello.java) 复制代码 代码如下: public class HelloDemo{    //声明一个类,类名称的命名规范:所有单词的首字母大写     public s