<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
首先在吐槽這個現象前,我先說下我們該篇的內容。
1. int 型別表欄位 在mysql資料庫裡面,到底存值的範圍是多少 ?
什麼時候是 -2147483648到 2147483647
什麼時候是 0 到4294967295
2. int (1) int(11) 這個括號後面的玩意,對於int來說 作用是什麼?
int(1) 就只能存入 0,1,2,3,4,5,6,7,8,9 嗎?
是這樣理解??? 我存個10不行?
可能對這些概念很清晰的人會覺得這篇文章沒有意義,是的。我一開始直到剛才我還是這樣認為。
但是剛剛我身邊的 研發們無意討論這個事情,我才知道,原來不是應屆生,是很多搞了很多年的人原來都沒搞明白這些東西。
那麼我猜測是不是還有很多兄弟們是沒弄清晰的, 科普性的文章非常有必要。
int 的 範圍 :
首先 int 4 位元組 ;
一個位元組 8位元, 4×8 =32 位 ;
所以範圍大小是 -2^31~2^31 -1 (-2147483648 ~ 2147483647) 。
int 的 範圍 :
首先 int 4位元組 ;
一個位元組 8位元, 4×8 =32 bit ;
所以範圍大小是 -2^31~2^31-1 (-2147483648 ~ 2147483647)
注意了,對於mysql來說,int 預設是 這樣的。
但是還存在 unsigned(無符號) int ,什麼意思呢,也就是無符號,將負的範圍分配到正去了,所以 unsigned(無符號) int 的範圍大小 是 0 到4294967295 。
接下來到了很無語的 int(1) 環節 。。
首先我先說結論, int (1) 在mysql 裡面 是指 顯示 長度 !!!
跟存值範圍沒半毛錢關係 !跟存值範圍沒半毛錢關係 !跟存值範圍沒半毛錢關係 !
建表 test ,表結構 如 :
存值, num 直接存入int (有符號) 的最大值 : 2147483647
INSERT INTO `test` (`num`) VALUES (2147483647);
可以看到正常儲存, 而並不是說 int(1) 就 是 只能 存 1位整數............ 希望之前還懵的人從此刻起,必須要糾正這個觀念了。 對於int型別,不要有這種錯誤的理念了!!!
ps : 存入一下更大的值 2147483648 ,可以看到提示超過範圍了 。
然後可能有人有疑惑了,為什麼經常很多同事動不動就 int(10) int(11)呢?
ps: 包括我身邊的同事, 還會順口說一句, 10夠用了 ,11夠用了之類的話.......
也是讓人很無語呢。
其實這10和11 來源也是有說法的,記得前文我說的,對於mysql 建立int 型別,預設就是有符號。 也就是說範圍在 -2147483648 ~ 2147483647 。
2147483647 長度 10
-2147483648 長度 11
所以 int (顯示長度) 弄 int (10 ) 和 int(11) 自然就知道是啥意思了。
那如果我就不用負數,要弄成 int (無符號)使用 ,怎麼操作?
alter test modify num int unsigned;
可以看到預設幫我們 int 改成無符號的 int時候,是int (10) ,這是最合理的。為什麼,還是因為這個顯示長度的概念, 無符號的int 範圍在 0 ~ 4294967295
4294967295 長度 10 ;
OK,我就是要違反這個預設給的10 , 我改成 int(1) :
alter test modify num int(1) unsigned;
然後隨便插入一個值, 12345678 :
insert into test (num) values (12345678);
沒錯,對於存在根本沒影響。
所以就是說, 我們要知道
int 型別欄位 ,在mysql 裡面 ,括號後面的 數位, 跟儲存的int 數值 範圍
半毛錢關係沒有!!!
那至於就是想用的比較 安心一點(強迫症) ,
那如果是 預設int (預設是有符號),那你就int(11) 好了;
如果是 無符號 unsigned int ,那你就int (10) 好了。
但是我最後還是很倔強提一句,記住,半毛錢關係沒有!
最後給大家說一哈幾個小事,
① 最好在建表的時候就考慮好 int欄位是有符號還是無符號,或者說最大想要存入的值的範圍。
因為如果你一開始設定無符號 unsigned int ,存入了 大於 2147483647(有符號int的最大值),然後想調整 int欄位 從 無符號變成有符號, 這時候會報錯、
② int 有符號不夠用,還可以用 bigint 8位元組,
8×8=64 位 ,-2^63~2^63-1 (-9223372036854775808~9223372036854775807)
③ navicat上面 看 只顯示3位長度 這件事,不必糾結這個navicat
navicat 操作介面 :
官方也給過解釋:
MySQL Server 8.0.17 deprecated the display width for the TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT data types when the ZEROFILL modifier is not used, and MySQL Server 8.0.19 has removed the display width for those data types from results of SHOW CREATE TABLE, SHOW CREATE FUNCTION, and queries on INFORMATION_SCHEMA.COLUMNS, INFORMATION_SCHEMA.ROUTINES, and INFORMATION_SCHEMA.PARAMETERS (except for the display width for signed TINYINT(1)). This patch adjusts Connector/J to those recent changes of MySQL Server and, as a result, DatabaseMetaData, ParameterMetaData, and ResultSetMetaData now report identical results for all the above-mentioned integer types and also for the FLOAT and DOUBLE data types. (Bug #30477722)
從8.0.17版本開始,TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT型別的顯示寬度將失效。
到此這篇關於Mysql中int(1)和int(11)的文章就介紹到這了,更多相關Mysql中int(1)和int(11)內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45