int(2) tinyint

1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是



-128到127



1.BIT[M]



位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1



2.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4



很小的整数。带符号的范围是-128到127。无符号的范围是0到255。




  1. BOOL,BOOLEAN



是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。



4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6



小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。



5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9



中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。




  1. INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11



普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。



7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20



大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。



注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。



tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,只有字段指定zerofill是有用,
如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。






char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:



char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.



(在检索操作中那些填补出来的空格字符将被去掉)



在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).



在MySQL中用来判断是否需要进行对据列类型转换的规则



1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.



2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.



3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.



例外:长度小于4个字符的char数据列不会被转换为varchar类型

mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围
类型 占用字节
tinyint 1



smallint 2



mediumint 3



int 4



bigint 8



mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,搜集了些资料,整理分享出来,这篇为有关mysql整型bigint、int、mediumint、smallint 和 tinyint的语法介绍,如下:
1、bigint



从 -2^63 -1(-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到



18446744073709551615(2^64 - 1)。一位为 8 个字节。



2、int



一个正常大小整数。有符号的范围是-2^31-1 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295(2^32 - 1)。一位大小为 4 个字节。
int 的 SQL-92 同义词为 integer。



3、mediumint
一个中等大小整数,有符号的范围是(-2^23-1)-8388608到到 2^23-1 8388607, 无符号的范围是0到16777215(2^24 - 1)。 一位大小为3个字节。



4、smallint



一个小整数。有符号的范围是-2^15-1(-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535(2^16 - 1) 。一位大小为 2 个字节。MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。



5、tinyint



有符号的范围是-128 - 127(-2^7 -1,2^7 -1),无符号的范围是 从 0 到 255(2^8 -1) 的整型数据。一位大小为 1 字节。



注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25 和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。在MySQL3.23中,这是一个真正的浮点值。在更早的MySQL版本中,FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。



tinyint



从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为 1个字节。



unsigned 是从 0 到 255 的整型数据。



所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。



smallint



从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。



unsigned 是从 0 到 65535 的整型数据。



所以建表的时候 只能是smallint(5),哪怕你建smallint(100),他最大还是5位这么多。



int



从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647)的整型数据(所有数字).存储大小为 4 个字节。



unsigned 是从 0 到 4294967296 的整型数据。



所以建表的时候 只能是int(10),哪怕你建int(100),他最大还是10位这么多。



bigint



从 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1(9,223,372,036,854,775,807) 的整型数据(所有数字)。存储大小为 8 个字节。



unsigned 是(自己算吧)



所以建表的时候 只能是bigint(20),哪怕你建bigint(100),他最大还是20位这么多。


Category storage