這篇文章給大家分享的是有關MySQL中varchar與char的區(qū)別有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
金口河網站建設公司創(chuàng)新互聯(lián)建站,金口河網站設計制作,有大型網站制作公司豐富經驗。已為金口河上千家提供企業(yè)網站建設服務。企業(yè)網站搭建\成都外貿網站制作要多少錢,請找那個售后服務好的金口河做網站的公司定做!
mysql中varchar與char的區(qū)別以及varchar(30)中的30代表的涵義
(1)varchar與char的區(qū)別
varchar存儲可變長字符串,小于255字節(jié)時需要1個額外字節(jié)(大于255需要2個額外字節(jié))存儲長度,最大長度為65532字節(jié)(所有列總和);
char存儲定長(right padding),讀取時會截斷末尾空格,長度最大為255字符;
char 與varchar都是用來存儲字符串的,只是他們的保存方式不一樣,char有固定的長度,而varchar屬于可變長的字符類型。
char是一種固定長度的類型,varchar則是一種可變長度的類型。
char(M)類型的數(shù)據列里,每個值都占用M個字節(jié),如果某個長度小于M,MySQL就會在它的右邊用空格字符補足。(在檢索操作中那些填補出來的空格字符將被去掉)在varchar(M)類型的數(shù)據列里,每個值只占用剛好夠用的字節(jié)再加上一個用來記錄其長度的字節(jié)(即總長度為L+1字節(jié))。
建議:
myisam存儲引擎建議使用固定長度,數(shù)據列代替可變長度的數(shù)據列。
memory存儲引擎目前都使用固定數(shù)據行存儲,因此無論使用char,varchar列都沒有關系。
Innodb存儲引擎建議使用varchar類型。
在MySQL中用來判斷是否需要進行對數(shù)據列類型轉換的規(guī)則:
1. 在一個數(shù)據表里,如果每一個數(shù)據列的長度都是固定的,那么每一個數(shù)據行的長度也將是固定的。
2. 只要數(shù)據表里有一個數(shù)據列的長度是可變的,那么各數(shù)據行的長度都是可變的。
3. 如果某個數(shù)據表里的數(shù)據行的長度是可變的,那么為了節(jié)約存儲空間,MySQL會把這個數(shù)據表里的固定長度類型的數(shù)據列轉換為相應的可變長度類型。
對于MyISAM表,盡量使用char,對于那些經常需要修改而容易形成碎片的myisam和isam數(shù)據表就更是如此,它的缺點就是占用磁盤空間;
對于InnoDB表,因為它的數(shù)據行內部存儲格式對固定長度的數(shù)據行和可變長度的數(shù)據行不加區(qū)分(所有數(shù)據行共用一個表頭部分,這個表頭部分存放著指向各個有關數(shù)據列的指針),所以使用char類型不見得會比使用varchar類型好。事實上,因為char類型通常要比varchar類型占用更多的空間,所以從減少空間占用量和減少磁盤i/o的角度,使用varchar類型反而更有利。
(2)varchar(30)中30的涵義
最大存儲30個字符;varchar(5)和(200)存儲hello所占空間一樣,但后者在排序時會消耗更多內存,因為order by col 采用fixed_length計算col長度(memory)引擎一樣。
For example, a varchar(255) column can hold a string with a maximum length of 255 characters(字符而非字節(jié)),對于latin1, ‘abcd’的L為4,存儲需要5個字節(jié);對于ucs2(雙字節(jié)字符),則需要10個字節(jié)存儲(最大長度為510>255,故需要額外2個字節(jié))
(3)int(20)中20的涵義
20表示最大顯示寬度為20,但仍占4個字節(jié)存儲,存儲范圍不變;
create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a));
create table int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));
select * from int_test;
+------------+
| a |
+------------+
| 0000000001 |
| 0000000002 |
| 0000000003 |
| 2147483648 |
+------------+
select * from int_test_4;
+------------+
| a |
+------------+
| 0001 |
| 0002 |
| 0003 |
| 2147483648 |
+------------+
(4)為什么MySQL這樣設計?
對大多數(shù)應用沒有意義,只是規(guī)定一些工具用來顯示字符的個數(shù);int(1)和int(20)存儲和結算均一樣。
感謝各位的閱讀!關于“Mysql中varchar與char的區(qū)別有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
當前題目:Mysql中varchar與char的區(qū)別有哪些
網站地址:http://sd-ha.com/article30/ggsoso.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網頁設計公司、移動網站建設、關鍵詞優(yōu)化、營銷型網站建設、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)