這篇文章給大家分享的是有關Mysql中varchar與char的區別有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
mysql中varchar與char的區別以及varchar(30)中的30代表的涵義
(1)varchar與char的區別
varchar存儲可變長字符串,小于255字節時需要1個額外字節(大于255需要2個額外字節)存儲長度,最大長度為65532字節(所有列總和);
char存儲定長(right padding),讀取時會截斷末尾空格,長度最大為255字符;
char 與varchar都是用來存儲字符串的,只是他們的保存方式不一樣,char有固定的長度,而varchar屬于可變長的字符類型。
char是一種固定長度的類型,varchar則是一種可變長度的類型。
char(M)類型的數據列里,每個值都占用M個字節,如果某個長度小于M,MySQL就會在它的右邊用空格字符補足。(在檢索操作中那些填補出來的空格字符將被去掉)在varchar(M)類型的數據列里,每個值只占用剛好夠用的字節再加上一個用來記錄其長度的字節(即總長度為L+1字節)。
建議:
myisam存儲引擎建議使用固定長度,數據列代替可變長度的數據列。
memory存儲引擎目前都使用固定數據行存儲,因此無論使用char,varchar列都沒有關系。
Innodb存儲引擎建議使用varchar類型。
在MySQL中用來判斷是否需要進行對數據列類型轉換的規則:
1. 在一個數據表里,如果每一個數據列的長度都是固定的,那么每一個數據行的長度也將是固定的。
2. 只要數據表里有一個數據列的長度是可變的,那么各數據行的長度都是可變的。
3. 如果某個數據表里的數據行的長度是可變的,那么為了節約存儲空間,MySQL會把這個數據表里的固定長度類型的數據列轉換為相應的可變長度類型。
對于MyISAM表,盡量使用char,對于那些經常需要修改而容易形成碎片的myisam和isam數據表就更是如此,它的缺點就是占用磁盤空間;
對于InnoDB表,因為它的數據行內部存儲格式對固定長度的數據行和可變長度的數據行不加區分(所有數據行共用一個表頭部分,這個表頭部分存放著指向各個有關數據列的指針),所以使用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(字符而非字節),對于latin1, ‘abcd’的L為4,存儲需要5個字節;對于ucs2(雙字節字符),則需要10個字節存儲(最大長度為510>255,故需要額外2個字節)
(3)int(20)中20的涵義
20表示最大顯示寬度為20,但仍占4個字節存儲,存儲范圍不變;
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這樣設計?
對大多數應用沒有意義,只是規定一些工具用來顯示字符的個數;int(1)和int(20)存儲和結算均一樣。
感謝各位的閱讀!關于“Mysql中varchar與char的區別有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。