MySQL中char和varchar的區別?varchar(1)占用幾個字節?


背景

依然是面試官提的問題,做一個復盤。

char和varchar的區別

區別一:定長和變長

在MySQL中,char和varchar都是用來存儲字符串的,區別在於char有固定的長度,而varchar屬於可變長的字符類型。
char有固定的的長度,所以在處理速度上要比varchar快很多,但是也相對更耗費存儲空間,在速度上有要求的可以使用char類型。

  • char類型是規定多少字長則必須存儲多少字長,超過的字段則只能截取出對應的長度進行存儲,相對於要去字長長度不夠的字段則用空格補齊。
  • varchar類型則是只要在規定字長之內,有多少就存多少,無需補齊;超出部分和char一樣,舍去即可。(由prefix實現)
區別二:存儲容量不同
  • 對於char類型來說,最多只能存放的字符個數為255,和編碼無關。
  • varchar最多能存放65532個字符,varchar的最大有效長度由最大行大小和使用的字符集來確定,整體最大長度是65532個字符。

varchar(1)占用幾個字節

首先要考慮一下varchar的長度是按字節來算還是按字符來算。查閱了一下網上的答案:

也就是:
在version4之前,MySQL中varchar長度是按字節;而version5之后,按字符。如varchar(6),在version4,表示占用6個字節,而在version5中,表示占用6個字符。

而字符和字節的換算,則與編碼方式有關,不同的字符所占的字節是不同的。:

  • ASCII碼:
    一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0,最大值255。如一個ASCII碼就是一個字節。

  • UTF-8編碼:
    一個英文字符等於一個字節,一個中文(含繁體)等於三個字節。

  • Unicode編碼:
    一個英文等於兩個字節,一個中文(含繁體)等於兩個字節。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM