淺談Mysql?tinyint(1)與tinyint(4)的區(qū)別
引言
借由本篇文章來(lái)探討下在Mysql數(shù)據(jù)庫(kù)中數(shù)值類型tinyint(1)和tinyint(4) 有啥區(qū)別呢?
什么是tinyint(M)?
先來(lái)了解下mysql中字符串類型varchar(M) 和數(shù)值類型tinyint(M) 的區(qū)別?
字符串列類型: varchar(M) 而言,M 是字段中可以存儲(chǔ)的最大字符長(zhǎng)度,也就是說(shuō)是字段長(zhǎng)度。根據(jù)設(shè)置,當(dāng)你插入超出字段長(zhǎng)度的數(shù)據(jù)時(shí),你很可能會(huì)收到錯(cuò)誤提示,即使沒(méi)有收到錯(cuò)誤提示,你插入的數(shù)據(jù)也會(huì)被自動(dòng)截?cái)嘁赃m應(yīng)該字段的預(yù)定義長(zhǎng)度。所以,varchar(20) 和 varchar(40) 是不同的,其真實(shí)反映了該字段可以存儲(chǔ)的數(shù)據(jù)長(zhǎng)度。
數(shù)值列類型:其長(zhǎng)度修飾符表示最大顯示寬度,與該字段物理存儲(chǔ)沒(méi)有任何關(guān)系。也就是說(shuō),tinyint(1) 和 tinyint(4) 能夠存儲(chǔ)的數(shù)值范圍都是-128…127 (or for unsigned values 0…255),他們是相同的數(shù)據(jù)類型,當(dāng)然他們還是有一點(diǎn)差異,以下會(huì)有說(shuō)明。
對(duì)于 tinyint 數(shù)據(jù)類型,只占 1 個(gè)字節(jié):
- 無(wú)符號(hào)的(unsigned),范圍是 0 到 255,默認(rèn)長(zhǎng)度是 3。
- 有符號(hào)的(signed),范圍是 -128 到 127,默認(rèn)長(zhǎng)度是 4。
范圍算法:tinyint占1個(gè)字節(jié),一個(gè)字節(jié) 8 位,也就是1*8=8,可以表示的數(shù)字個(gè)數(shù)是 2的 8 次方(2^8 = 256個(gè)數(shù)字)。
區(qū)別:若使用了 zerofill,當(dāng)實(shí)際長(zhǎng)度達(dá)不到指定的顯示長(zhǎng)度時(shí),就會(huì)用 0 在前面補(bǔ)齊。(簡(jiǎn)記zerofill作用就是補(bǔ)零)
測(cè)試
先創(chuàng)建一張測(cè)試表,對(duì) tinyint 類型都使用 zerofill。
CREATE TABLE `pre_demo` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵', `unsigned_t` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000', `signed_t` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000', `t1` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0', `t2` tinyint(2) unsigned zerofill NOT NULL DEFAULT '00', `t3` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000', `t4` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000', `t5` tinyint(5) unsigned zerofill NOT NULL DEFAULT '00000', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
然后,插入測(cè)試數(shù)據(jù)。
NSERT INTO pre_demo VALUES(NULL,8,8,8,8,8,8,8); INSERT INTO pre_demo VALUES(NULL,123,123,123,123,123,123,123);
最后,查詢數(shù)據(jù)表中的數(shù)據(jù)。
mysql> SELECT * FROM pre_demo; +----+------------+----------+-----+-----+-----+------+-------+ | id | unsigned_t | signed_t | t1 | t2 | t3 | t4 | t5 | +----+------------+----------+-----+-----+-----+------+-------+ | 1 | 008 | 0008 | 8 | 08 | 008 | 0008 | 00008 | | 2 | 123 | 0123 | 123 | 123 | 123 | 0123 | 00123 | +----+------------+----------+-----+-----+-----+------+-------+ 2 rows in set (0.00 sec)
mysql> SELECT *,LENGTH(id),LENGTH(unsigned_t),LENGTH(t1) FROM pre_demo; +----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+ | id | unsigned_t | signed_t | t1 | t2 | t3 | t4 | t5 | LENGTH(id) | LENGTH(unsigned_t) | LENGTH(t1) | +----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+ | 1 | 008 | 0008 | 8 | 08 | 008 | 0008 | 00008 | 1 | 3 | 1 | | 2 | 123 | 0123 | 123 | 123 | 123 | 0123 | 00123 | 1 | 3 | 3 | +----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+ 2 rows in set (0.00 sec)
總結(jié)
- tinyint(1) 與 tinyint(4) 能夠存儲(chǔ)的數(shù)據(jù)范圍是一樣的,都是 0 到 255(無(wú)符號(hào)的)。區(qū)別在于,當(dāng)使用 zerofill 時(shí),查詢結(jié)果顯示的長(zhǎng)度可能不同。
- zerofill 和 指定長(zhǎng)度配合使用,可用于統(tǒng)一數(shù)據(jù)的顯示長(zhǎng)度,比如在數(shù)據(jù)庫(kù)層面快速生成統(tǒng)一長(zhǎng)度的流水號(hào)。
- 一般情況下,無(wú)須刻意指定整型數(shù)據(jù)類型的長(zhǎng)度。使用 MySQL 的默認(rèn)長(zhǎng)度tinyint(4) 即可。
參考文獻(xiàn)
http://blog.darkmi.com/2016/06/24/3110.html
https://blog.csdn.net/lamp_yang_3533/article/details/100061678
到此這篇關(guān)于淺談Mysql tinyint(1)與tinyint(4)的區(qū)別的文章就介紹到這了,更多相關(guān)Mysql tinyint(1)與tinyint(4)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何將MySQL的兩個(gè)表名對(duì)調(diào)
本文介紹怎么將MySQL的兩個(gè)表名調(diào)換,這個(gè)辦法更能確保更換的安全,不出其他的問(wèn)題,有需要的可以參考下。2016-08-08
mysql用戶創(chuàng)建與授權(quán)的簡(jiǎn)單實(shí)例
MySQL等主流數(shù)據(jù)庫(kù)的最高權(quán)限一般是root用戶,有時(shí)我們需要提供數(shù)據(jù)庫(kù)的賬號(hào)和密碼以使用某些服務(wù),下面這篇文章主要給大家介紹了關(guān)于mysql用戶創(chuàng)建與授權(quán)的相關(guān)資料,需要的朋友可以參考下2022-03-03
mysql 5.7.21 winx64綠色版安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.21 winx64綠色版安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
MySQL數(shù)據(jù)庫(kù) Load Data 多種用法
這篇文章主要介紹MySQL數(shù)據(jù)庫(kù)中 Load Data 數(shù)據(jù)的幾種種用法,需要的朋友可以參考下面文章的解說(shuō)2021-08-08

