新聞中心
字符與字節(jié)的區(qū)別(查閱引用)
成都創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號搭建、成都小程序開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!
①ASCII碼中,一個(gè)英文字母(不分大小寫)占一個(gè)字節(jié)的空間,一個(gè)中文漢字占兩個(gè)字節(jié)的空間。一個(gè)二進(jìn)制數(shù)字序列,在計(jì)算機(jī)中作為一個(gè)數(shù)字單元,一般為8位二進(jìn)制數(shù),換算為十進(jìn)制。最小值0,最大值255。
②UTF-8編碼中,一個(gè)英文字符等于一個(gè)字節(jié),一個(gè)中文(含繁體)等于三個(gè)字節(jié)。
③Unicode編碼中,一個(gè)英文等于兩個(gè)字節(jié),一個(gè)中文(含繁體)等于兩個(gè)字節(jié)。
符號:英文標(biāo)點(diǎn)占一個(gè)字節(jié),中文標(biāo)點(diǎn)占兩個(gè)字節(jié)。舉例:英文句號“.”占1個(gè)字節(jié)的大小,中文句號“?!闭?個(gè)字節(jié)的大小。
④UTF-16編碼中,一個(gè)英文字母字符或一個(gè)漢字字符存儲都需要2個(gè)字節(jié)(Unicode擴(kuò)展區(qū)的一些漢字存儲需要4個(gè)字節(jié))。
⑤UTF-32編碼中,世界上任何字符的存儲都需要4個(gè)字節(jié)。
字節(jié)(Byte)是一種計(jì)量單位,表示數(shù)據(jù)量多少,它是計(jì)算機(jī)信息技術(shù)用于計(jì)量存儲容量的一種計(jì)量單位。
字符是指計(jì)算機(jī)中使用的文字和符號,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。
存數(shù)據(jù)時(shí)的區(qū)別
char定義的是固定長度,長度范圍為0-255,存儲時(shí),如果字符數(shù)沒有達(dá)到定義的位數(shù),會在后面用空格補(bǔ)全存入數(shù)據(jù)庫中。char最多能存放255個(gè)字符個(gè)數(shù),和編碼無關(guān)。
varchar是變長長度,長度范圍為0-65535,存儲時(shí),如果字符沒有達(dá)到定義的位數(shù),也不會在后面補(bǔ)空格。對于varchar,理論上最多能存放65535個(gè)字符,varchar 字段是將實(shí)際內(nèi)容單獨(dú)存儲在聚簇索引之外,內(nèi)容開頭用1到2個(gè)字節(jié)表示實(shí)際長度(長度超過255時(shí)需要2個(gè)字節(jié)),因此最大長度不能超過65535字符。當(dāng)用到utf-8編碼時(shí)候最多可以存21844個(gè)字符,在gbk編碼下最多可以有32766個(gè)字符,Latin1 一個(gè)字符占一個(gè)字節(jié),最多能存放 65532 個(gè)字符。
GBK編碼計(jì)算方式:
若一個(gè)表只有一個(gè)varchar類型:
32766=(65535-1-2)/2。
減1的原因是實(shí)際存儲從第二字節(jié)開始;
減2的原因是varchar頭部的2個(gè)字節(jié)表示長度;
除2的原因是字符編碼是gbk;
UTF8計(jì)算方式:
32766=(65535-1-2)/3。
減1的原因是實(shí)際存儲從第二字節(jié)開始;
減2的原因是varchar頭部的2個(gè)字節(jié)表示長度;
實(shí)際例子:
create table t11(c int, c2 char(30), c3 varchar(21812)) charset=utf8;
減1的原因是實(shí)際存儲從第二字節(jié)開始;
減2的原因是varchar頭部的2個(gè)字節(jié)表示長度;
減4的原因是int類型的c占4個(gè)字節(jié);
減30*3的原因是char(30)占用90個(gè)字節(jié),編碼是utf8。
取數(shù)據(jù)區(qū)別
數(shù)據(jù)庫取char字段的數(shù)據(jù)的時(shí)候會把空格去掉,但是在取varchar字段的數(shù)據(jù)時(shí),數(shù)據(jù)的尾部空格會保留
存儲引擎對于選擇CHAR和VARCHAR的影響:
對于MyISAM存儲引擎:最好使用固定長度的數(shù)據(jù)列代替可變長度的數(shù)據(jù)列。這樣可以使 整個(gè)表靜態(tài)化,從而使數(shù)據(jù)檢索更快,用空間換時(shí)間。
對于InnoDB存儲引擎:使用可變長度的數(shù)據(jù)列,因?yàn)镮nnoDB數(shù)據(jù)表的存儲格式不分固定 長度和可變長度,因此使用CHAR不一定比使用VARCHAR更好,但由于VARCHAR是按照 實(shí)際的長度存儲,比較節(jié)省空間,所以對磁盤I/O和數(shù)據(jù)存儲總量比較好。
當(dāng)前名稱:char和varchar差異
網(wǎng)頁URL:http://www.dlmjj.cn/article/pscdoi.html