在MySQL中,我們經(jīng)常會遇到默認(rèn)值為0的字段,也就是說,如果沒有顯式地為該字段賦值,那么MySQL就會默認(rèn)將其賦值為0。
那么為什么MySQL會默認(rèn)將字段賦值為0呢?其實(shí)這背后有一個(gè)歷史原因。
早期的MySQL版本,為了方便存儲數(shù)值型數(shù)據(jù),采用了一種叫做 "packed" 的格式。在這種格式下,如果一個(gè)字段沒有被顯式地賦值,那么MySQL會將其賦值為0。
雖然現(xiàn)在的MySQL版本已經(jīng)不再使用 "packed" 格式了,但是默認(rèn)為0的習(xí)慣還是被保留下來了。這也是為什么我們在創(chuàng)建數(shù)據(jù)表時(shí),如果沒有為字段指定默認(rèn)值,MySQL會自動將其設(shè)置為0。
當(dāng)然,如果我們不希望某個(gè)字段默認(rèn)為0,我們可以為其指定其他的默認(rèn)值,比如說空字符串或者NULL。
CREATE TABLE `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `age` int(11) NOT NULL DEFAULT '18', `score` decimal(5,2) NOT NULL DEFAULT '0.00', `address` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
上面的代碼中,我們?yōu)?age 和 score 字段分別指定了默認(rèn)值,分別是 '18' 和 '0.00'。這樣,在插入數(shù)據(jù)時(shí),如果我們沒有為這兩個(gè)字段賦值,MySQL就會將它們默認(rèn)為 18 和 0.00。
總之,MySQL默認(rèn)為0是一種歷史遺留問題,但也是一種方便的設(shè)計(jì)。我們在使用MySQL時(shí),只需要根據(jù)自己的需求來指定合適的默認(rèn)值即可。