stock_number tinyint(1) 如果stock_number此時的值是127,當庫存+1的時候,就會超過int的最大范圍(error: Data truncation: Out of range value for column 'stock_total' at row 1)
類型 最小值 最大值 占用字節
tinyint -128 127 1
smallint -32768 32767 2
mediumint -8388608 8388607 3
int/integer -2147483648 2147483647 4
bigint -9223372036854775808 9223372036854775807 8
1 bytes = 8 bit ,一個字節最多可以代表的數據長度是2的8次方 11111111 在計算機中也就是 -128到127

https://www.cnblogs.com/totian/p/7065123.html
————————————————————————————————————————————————
tinyint 型的字段如果設置為unsigned類型,只能存儲從0到255的整數,不能用來儲存負數。
tinyint 型的字段如果不設置unsigned類型,存儲-128到127的整數。
1個tinyint型數據只占用一個字節;一個INT型數據占用四個字節。
這看起來似乎差別不大,但是在比較大的表中,字節數的增長是很快的。
tinyint(1)與tinyint(2)的區別可以從下面看出來:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`str` varchar(255) NOT NULL,
`state` tinyint(1) unsigned zerofill DEFAULT NULL,
`state2` tinyint(2) unsigned zerofill DEFAULT NULL,
`state3` tinyint(3) unsigned zerofill DEFAULT NULL,
`state4` tinyint(4) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
insert into test (str,state,state2,state3,state4) values('csdn',4,4,4,4);
select * from test;
結果:
id str state state2 state3 state4
1 csdn 4 04 004 0004
於是在dll里面channel` tinyint(2) unsigned zerofill DEFAULT ‘00’
問題來了,2指的是存儲寬度,不表示存儲長度。如果列制定了zerofill 就會用0填充顯示,例如tinyint(2)指定后2就會顯示為02,自動左邊補零。
https://blog.csdn.net/ahjxhy2010/article/details/83586762
————————————————