欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳細深入聊一聊Mysql中的int(1)和int(11)

 更新時間:2022年08月08日 11:17:36   作者:小目標青年  
mysql數(shù)據(jù)庫作為當前常用的關系型數(shù)據(jù)庫,肯定會遇到設計表的需求,下面對設計表時int類型的設置進行分析,下面這篇文章主要給大家介紹了關于Mysql中int(1)和int(11)的相關資料,需要的朋友可以參考下

前言

首先在吐槽這個現(xiàn)象前,我先說下我們該篇的內(nèi)容。

1.  int 類型表字段 在mysql數(shù)據(jù)庫里面,到底存值的范圍是多少 ?

什么時候是  -2147483648到 2147483647  

什么時候是 0 到4294967295

2. int (1) int(11) 這個括號后面的玩意,對于int來說 作用是什么?

int(1) 就只能存入 0,1,2,3,4,5,6,7,8,9 嗎?
是這樣理解??? 我存?zhèn)€10不行?

可能對這些概念很清晰的人會覺得這篇文章沒有意義,是的。我一開始直到剛才我還是這樣認為。

但是剛剛我身邊的 研發(fā)們無意討論這個事情,我才知道,原來不是應屆生,是很多搞了很多年的人原來都沒搞明白這些東西。

那么我猜測是不是還有很多兄弟們是沒弄清晰的, 科普性的文章非常有必要。

正文

java 

int 的 范圍 :

首先   int             4   字節(jié)  ;

一個字節(jié) 8位,  4×8 =32  位  ;

所以范圍大小是     -2^31~2^31 -1  (-2147483648 ~ 2147483647)  。

mysql

int 的 范圍 :

首先   int         4字節(jié)  ;

一個字節(jié) 8位,  4×8 =32  bit  ;

所以范圍大小是     -2^31~2^31-1   (-2147483648 ~ 2147483647)  

注意了,對于mysql來說,int 默認是 這樣的。

但是還存在  unsigned(無符號)  int ,什么意思呢,也就是無符號,將負的范圍分配到正去了,所以    unsigned(無符號)  int 的范圍大小 是  0 到4294967295    。

接下來到了很無語的  int(1) 環(huán)節(jié) 。。

首先我先說結論, int (1)  在mysql 里面 是指 顯示 長度  ?。?! 

跟存值范圍沒半毛錢關系 !跟存值范圍沒半毛錢關系 !跟存值范圍沒半毛錢關系 !

建表 test  ,表結構 如 :

 存值, num 直接存入int (有符號) 的最大值 :  2147483647  

INSERT INTO `test` (`num`) VALUES (2147483647);?

 可以看到正常存儲, 而并不是說 int(1) 就 是 只能 存 1位整數(shù)............  希望之前還懵的人從此刻起,必須要糾正這個觀念了。 對于int類型,不要有這種錯誤的理念了!??!

ps : 存入一下更大的值  2147483648 ,可以看到提示超過范圍了  。

 然后可能有人有疑惑了,為什么經(jīng)常很多同事動不動就 int(10) int(11)呢?

ps: 包括我身邊的同事, 還會順口說一句, 10夠用了 ,11夠用了之類的話.......
也是讓人很無語呢。

 其實這10和11 來源也是有說法的,記得前文我說的,對于mysql 創(chuàng)建int 類型,默認就是有符號。 也就是說范圍在 -2147483648 ~ 2147483647  。

2147483647   長度 10 

-2147483648 長度 11 

所以 int (顯示長度)  弄 int (10 ) 和  int(11)  自然就知道是啥意思了。

那如果我就不用負數(shù),要弄成 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 里面 ,括號后面的 數(shù)字, 跟存儲的int 數(shù)值 范圍 

半毛錢關系沒有?。。?/strong>

那至于就是想用的比較 安心一點(強迫癥) ,

那如果是 默認int (默認是有符號),那你就int(11) 好了;

如果是    無符號 unsigned int ,那你就int (10) 好了。

但是我最后還是很倔強提一句,記住,半毛錢關系沒有!

最后給大家說一哈幾個小事,

① 最好在建表的時候就考慮好 int字段是有符號還是無符號,或者說最大想要存入的值的范圍。

因為如果你一開始設置無符號  unsigned int ,存入了 大于 2147483647(有符號int的最大值),然后想調(diào)整 int字段 從 無符號變成有符號, 這時候會報錯、 

② int 有符號不夠用,還可以用 bigint  8字節(jié),
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)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論