一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - mysql中char與varchar的區別分析

mysql中char與varchar的區別分析

2019-11-07 16:27mysql教程網 Mysql

在mysql教程中char與varchar的區別呢,都是用來存儲字符串的,只是他們的保存方式不一樣罷了,char有固定的長度,而varchar屬于可變長的字符類型。

char與varchar的區別 

char (13)長度固定, 如'm.ythuaji.com.cn' 存儲需要空間 12個字符 

varchar(13) 可變長 如'm.ythuaji.com.cn' 需要存儲空間 13字符, 

從上面可以看得出來char 長度是固定的,不管你存儲的數據是多少他都會都固定的長度。而varchar則處可變長度但他要在總長度上加1字符,這個用來存儲位置。所以實際應用中用戶可以根據自己的數據類型來做。 

再看看char,與varchar在速度上的區別吧。 

復制代碼代碼如下:


mysal>create tabe ab(v varchar(4),c char(4)); 
query ok ,0 rows affected(0.02 sec) 
mysql>insert into abc values('ab ','ab ') 
query ok ,1 row affected(0.00 sec); 
mysql->select concat(v ,'+') ,concat(c ,'+') form abc 
ab + | ab+ 
1rows in set (0.00 sec) 


從上面可以看出來,由于某種原因char 固定長度,所以在處理速度上要比varchar快速很多,但是對費存儲空間,所以對存儲不大,但在速度上有要求的可以使用char類型,反之可以用varchar類型來實例。 

注明: 

在用char字符類型時內容后面有空間時必須作相關處理,要不就會把空格自動刪除。 

建意: 

myisam 存儲引擎 建議使用固定長度,數據列代替可變長度的數據列。 
memory存儲引擎 目前都使用固定數據行存儲,因此無論使用char varchar列都沒關系, 
innodb 存儲引擎 建意使用varchar 類型 


以下是其它網友的補充 


char是一種固定長度的類型,varchar則是一種可變長度的類型 
  char(M)類型的數據列里,每個值都占用M個字節,如果某個長度小于M,MySQL就會在它的右邊用空格字符補足.(在檢索操作中那些填補出來的空格字符將被去掉)在varchar(M)類型的數據列里,每個值只占用剛好夠用的字節再加上一個用來記錄其長度的字節(即總長度為L+1字節). 

在MySQL中用來判斷是否需要進行對據列類型轉換的規則 

 ?。薄⒃谝粋€數據表里,如果每一個數據列的長度都是固定的,那么每一個數據行的長度也將是固定的. 
 ?。?、只要數據表里有一個數據列的長度的可變的,那么各數據行的長度都是可變的. 
  3、如果某個數據表里的數據行的長度是可變的,那么,為了節約存儲空間,MySQL會把這個數據表里的固定長度類型的數據列轉換為相應的可變長度類型. 
例外:長度小于4個字符的char數據列不會被轉換為varchar類型 

  對于MyISAM表,盡量使用Char,對于那些經常需要修改而容易形成碎片的myisam和isam數據表就更是如此,它的缺點就是占用磁盤空間; 

  對于InnoDB表,因為它的數據行內部存儲格式對固定長度的數據行和可變長度的數據行不加區分(所有數據行共用一個表頭部分,這個標頭部分存放著指向各有關數據列的指針),所以使用char類型不見得會比使用varchar類型好。事實上,因為char類型通常要比varchar類型占用更多的空間,所以從減少空間占用量和減少磁盤i/o的角度,使用varchar類型反而更有利. 

文章2: 
字符應該是最常見的一種了,但似乎各個數據庫都有所不同,比如oracle中就有啥varchar2之類。不過mysql似乎最多的還是集中在char和varchar上。 
說說區別。char是固定長度的,而varchar會根據具體的長度來使用存儲空間。比如char(255)和varchar(255),在存儲字符串"hello world"的時候,char會用一塊255的空間放那個11個字符,而varchar就不會用255個,他先計算長度后只用11個再加上計算的到字符串長度信息,一般1-2個byte來,這樣varchar在存儲不確定長度的時候會大大減少存儲空間。 

如此看來varchar比char聰明多了,那char有用武之地嗎?還是很不少優勢的。 

一,存儲很短的信息,比如門牌號碼101,201……這樣很短的信息應該用char,因為varchar還要占個byte用于存儲信息長度,本來打算節約存儲的現在得不償失。 

二,固定長度的。比如使用uuid作為主鍵,那用char應該更合適。因為他固定長度,varchar動態根據長度的特性就消失了,而且還要占個長度信息。 

三,十分頻繁改變的column。因為varchar每次存儲都要有額外的計算,得到長度等工作,如果一個非常頻繁改變的,那就要有很多的精力用于計算,而這些對于char來說是不需要的。 


還有一個關于varchar的問題是,varchar他既然可以自動適應存儲空間,那我varchar(8)和varchar(255)存儲應該都是一樣的,那每次表設計的時候往大的方向去好了,免得以后不夠用麻煩。這個思路對嗎?答案是否定的。mysql會把表信息放到內存中(查詢第一次后,就緩存住了,linux下很明顯,但windows下似乎沒有,不知道為啥),這時內存的申請是按照固定長度來的,如果varchar很大就會有問題。所以還是應該按需索取。 

總結:仔細看DZ的數據表,定長的字段基本還都是用char....

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: caoporn国产 | 国产精品视频免费一区二区三区 | 图片专区小说专区卡通动漫 | 久草草在线视视频 | 欧美精品日韩 | 范冰冰a级一级特级毛片 | 麻豆网站视频国产在线观看 | hd在线观看免费高清视频 | 青草青青在线视频 | 精品破处| 日不卡| 第一次破苞h | 揉搓喷水h| 扒开双腿羞辱调教play视频 | 五月婷婷丁香在线视频 | 韩剧网3600热播剧 | 99热这里有精品 | yellow视频在线观看免费 | a级黄色片免费 | 国产精品免费网站 | 国内精品久久久久影院嫩草 | 欧美一区二区三区大片 | 成人中文字幕在线观看 | 欧美老人与小伙子性生交 | 国产91精选在线观看麻豆 | 男人猛戳女人下部30分钟 | aⅴ视频在线免播放观看 | 哇嘎在线精品视频在线观看 | 好骚好紧 | a一级黄| 欧美特级午夜一区二区三区 | 国产亚洲精品看片在线观看 | 咪咪爱991| 免费看男人使劲躁女人小说 | 99在线精品免费视频 | 美女主播免费观看 | 日本激情在线 | 亚洲剧情在线 | 精品无人区麻豆乱码1区2 | 美味情缘韩国在线观看视频 | 男男双性生子产乳高辣h |