MySQL資料庫int型別的那些事
某天朋友問我“為什麼我在MySQL資料庫中,建表的SQL語句和查詢建表後的建表語句不一樣啊,int型別的自動變為int(11)了”。我只能回答,“就是醬紫的啊,MySQL就這麼設計的”。可是我不能回答為什麼會是這樣,為什麼會是11不是12呢。突然發現自己好low啊,這個問題都回答不了。查了相關資料和做了如下測試後算是徹底搞明白了這個問題。
首先,使用如下sql語句建表:
CREATE TABLE test(id int);
然後使用mysql命令檢視建表語句
SHOW CREATE TABLE test
結果顯示如下:
這裡int自動的變成了int(11)。為什麼會這樣,還得從int(m)中的m指的是什麼來回答這個問題。
MySQL中int型別的取值範圍是固定的,帶符號範圍:-2 147 483 648~2 147 483 647 無符號範圍:0~4 294 967 295 。int(m)中的m值,只是決定在查詢時顯示中的最小長度,對於取值範圍沒有半毛錢的關係。比如將id欄位的屬性改為int(5) zerofill ,這個屬性的意思是,定義一個int型別的欄位,欄位值如果小於5位,高位用0填充。驗證如下,
通過結果可以看到,如果不足5位,在前面用0填充顯示,如果超出5位數,對長度也沒有任何影響。知道了(m)的作用,那麼再來說說為什麼MySQL會預設給11位,數一數int取值範圍的最大值和帶符號範圍的最小值發現剛好是10位數,因為還要給顯示符號留一位,所以預設就是int(11)嘍。
m的取值範圍是多少?在int型別的欄位上賦超過範圍的值會報什麼樣的錯誤?大家都可以去嘗試一下。
如果讀到這裡,認為我想表達的是“實踐出真理”嗎?不不不,我想說,實踐固然重要,但是閱讀官方文件更重要。官方的才是最正經的。對於本文的問題,官網文件中給出了明確的說明。
相關文章
- 為什麼資料庫表的int型別欄位對映到實體類中要使用Integer型別,而不是int型別?...資料庫型別
- Mysql的那些事兒(部分涉及資料庫知識總結)MySql資料庫
- 判斷a是否是int型別資料型別
- MySQL 資料庫的對庫的操作及其資料型別悔鋒MySql資料庫資料型別
- Java 資料庫連線的那些事Java資料庫
- MySQL資料遷移那些事兒MySql
- MySQL 的資料型別MySql資料型別
- MYSQL資料庫型別與JAVA型別對應關係MySql資料庫型別Java
- oracle資料庫事務transaction 不同的鎖lock型別Oracle資料庫型別
- 建立一個MySQL資料庫中的datetime型別MySql資料庫型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- [Mysql]資料型別MySql資料型別
- MySQL資料型別MySql資料型別
- MYSQL 資料型別MySQL 資料型別
- mysql資料庫中decimal資料型別比較大小MySql資料庫Decimal資料型別
- mysql 常用的資料型別MySql資料型別
- python 從list移除-1和非int型別的資料Python型別
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- MySQL int型別長度的意義是什麼MySql型別
- MySql資料庫 數值型別的顯示寬度MySql資料庫型別
- MySQL基本資料型別MySql資料型別
- mysql 資料型別TIMESTAMPMySQL 資料型別
- PHP基礎-資料型別-string和int比較PHP資料型別
- 06. MySQL的資料型別MySql資料型別
- 【MySQL】資料型別的基本用法MySql資料型別
- Mysql 資料型別之整數型別MySQL 資料型別
- Java 支援的資料型別與 MySQL 支援的資料型別對比Java資料型別MySql
- 關於mysql中欄位定義的型別int、tinyint區別MySql型別
- MySQL 修改int型別為bigint SQL語句拼接MySql型別
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- INT型別知多少型別
- 從 Oracle 轉型 MySQL 分散式事務資料庫的實戰旅途OracleMySql分散式資料庫
- 分析資料庫的事務隔離級別在資料庫選型分析的時候很重要資料庫
- BigDecimal轉為String型別、int型別Decimal型別
- java查詢資料庫,int型欄位為null的情況Java資料庫Null
- MySQL JSON資料型別操作MySqlJSON資料型別
- 詳解MySQL資料型別MySql資料型別
- MySQL資料型別筆記MySql資料型別筆記
- mysql常見資料型別MySql資料型別