1.背景*MySQL支持SQL标准整型整数(或INT)和SMALLINT。作为标准扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT2。整数类型所需的存储和取值范围类型占用最小***值 (bytes)(signed/Unsigned)(signed/Unsigned)TINYINT1-1281270255SMALLINT2-3276832767065535MEDIUMINT3-83886088388607016777215INT4-2147483648214748364704294967295BIG26INT8-254775808922337203685477580701844467440737095516153.ZEROFILL属性属性属性属性遇到遇到创建创建创建创建创建serofillzerofillzerofillzerofill_testmysql>createTableMysql>createTable>createTable_Teastemer_testemer_testquorl_testquorl_testquortquortquorlifl_teint>6.6.Valueswhoselengthislessthan6mysql>INSERTINTOzerofill_testSELECT11111;QueryOK,1rowaffected(0.03sec)Records:1Duplicates:0Warnings:0*Insertvalueswhoselengththan6mysql>INSERTINTOzerofill_testSELECT2222222;QueryOK,1rowaffected(0.04sec)Records:0Warnings:0Duplic*查看zerofill_test表中所有数据mysql>SELECT*FROMzerofill_test;+--------+|id|+--------+|011111||2222222|+---------+2rowsinset(0.01sec)*zerofillsummary*当显示值的长度小于INT定义的长度时,高位补0显示*当长度为显示值大于INT定义的长度,照常显示*零填充显示4.无符号类型溢出*创建无符号测试表unsigned_testmysql>CREATETABLEunsigned_test(->idBIGINTPRIMARYKEYNOTNULLAUTO_INCREMENT,->dataINTUNSIGNED->)ENGINE=INNODBCHARSET=utf8mb4;QueryOK,0rowsaffected(0.12sec)*插入两行一大一小值mysql>INSERTINTOunsigned_testSELECTnull,1;QueryOK,1rowaffected(0.03sec)Records:1Duplicates:0Warnings:0mysql>INSERTINTOunsigned_testSELECTnull,2;QueryOK,1rowaffected(0.01secup)Records:1D:0Warnings:0*查看表中插入的数据值mysql>SELECT*FROMunsigned_test;+----+-----+|id|data|+----+-----+|1|1||2|2|+----+-----+2rowsinset(0.00sec)*用小数值减大数值mysql>SELECTdata-(SELECTdataFROMunsigned_testwhereid=2)FROMunsigned_testwhereid=1;ERROR1690(22003):BIGINTUNSIGNEDvalueisoutofrangein'(`mytest`.`unsigned_test`.`data`-(select`mytest`.`unsigned_test`.`data`from`mytest`.`unsigned_test`where1))'5。整数类型应用总结*signed/Unsigned: 是否有符号*ZEROFILL:显示属性,不修改值*建议不要使用UNSIGNED,范围基本不变*UNSIGNED可能有溢出现象*auto-incrementINT类型主键推荐使用BIGINT6。总之,技术是由需求驱动的。技术本身没有优势,只有业务
