每日一记-mysql中的int(11)-int(4)和int类型

来源:互联网 发布:c语言if else if 编辑:程序博客网 时间:2024/06/02 05:45

mysql中的int(4)-int(11)与int类型

前言

对于数据库,使用倒也不少,增删查改各种操作,但是没有认真学习过,只是会用,最近遇到一个情况才去研究了一个小问题。
新建一个表的时候:

CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT) 

之前一直有一个习惯的认知,觉得在建表中的int(#)就表示用#位的int型数据,有时会好奇为什么这么设置,但是也没研究过。这次是调试过程中,遇到了问题还以为程序性错误了,最后才发现是自己认知错误。

int(4)-int(11)-int类型

int类型

int类型的不用多少,常规的数据类型,4字节,无符号数范围0~4294967295,有符号数范围-2147483648~2147483647,

int(4)-int(11)

int后边的(#)内的数字#与int类型的数字范围无关,不会因为里边是11或者4,就表示11位或者4位的int型数据,这个#字只表示数字显示出来的宽度。数据显示的宽度有俩种情况:

  1. 如果没有在数据库设置0填充,那么其实不管设置显示的宽度为多少,显示就是数据库内的数据,不会在数据左侧自动填充0来补足显示的宽度;
  2. 设置了0填充,在查询结果时候显示出来的数据宽度不够设置的显示宽度时候,就会在数据左侧填充0直到达到设置的显示宽度,但是有一个问题就是设置了0填充,数据会自动变成unsigned类型的;如果数据宽大超过设置的显示宽度,也不会将数据只显示指定的显示宽度。

数据示例

以数据为例,假定有俩张表test、test1:

DROP TABLE IF EXISTS test;CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT,name varchar(50) NOT NULL,password varchar(50) NOT NULL,code int(4),PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS test1;CREATE TABLE test1 (id int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,name varchar(50) NOT NULL,password varchar(50) NOT NULL,code int(4) unsigned zerofill,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;       

分别在俩张表内插入相同的俩条数据:

123,tom,123456,12312345,jack,123456,12345

然后在mysql命令行下查询数据:

实验分析与结论

从上图中可以看出来,同样数据类型,插入同样的数据,显示出来的结果:

  1. 123如果设置了0填充,则显示是会自动在左侧插入0,补足显示位宽,如int(11)的123为00000000123;没有设置零填充时,就是显示123
  2. 即便设置了显示的宽度,如果数据宽度超出了设置的显示宽度,如int(4)的12345,显示的时候并不会发生只显示1234或者2345的状况。

需要记住的一点是如果设置了零填充,那么数据的类型会自动变为unsigned的类型,所以在使用时候需要注意这一点。

0 0
原创粉丝点击