面試官:我看你們項目上用的是MySQL,相關的類型了解嗎?
派大星:嗯,了解一些。
面試官:嗯,那你知道char和varchar的區別是什么嘛?簡單說一說。
派大星:好的。
首先,CHAR和VARCHAR均為數據庫中用于存儲字符串數據的數據類型。它們之間的主要區別在于存儲空間的使用方式。
比如:CHAR為一種定長數據類型,其長度固定且在存儲時會自動加入空格以填滿指定長度,長度范圍為0至255;
VARCHAR則為一種可變長度數據類型,僅存儲實際的字符串內容,無需填充空格。故在存儲短字符串時,VARCHAR能夠節省空間,長度范圍為0至65535(適用于MySQL 5.0.3及之后版本)。
若采用CHAR(100),插入記錄后即分配了100個字符,后續修改不引起頁分裂問題;而VARCHAR(100)因未預分配存儲空間,初始插入數據時,可變長度字段按實際長度儲存,且數據在文件中緊密連續。若值變長,原位置無法擴展,無法覆蓋原空間,MySQL將采用頁分裂方式擴展字段的長度。
面試官:不錯,既然這樣,它倆在使用的時候有什么有缺點呢?
派大星:
VARCHAR的優勢:在于其可變長度的字符類型,具有更好的兼容性;然而,使用VARCHAR可能引發內存碎片問題,需要額外1到2個字節存儲長度信息,并更新語句可能導致頁分裂等情況。
舉例來說,適合使用VARCHAR的場景包括存儲產品描述(可變長度)、用戶地址(可變長度)以及用戶名稱(可變長度)。
CHAR的長處在于其定長字符串類型,有助于減少內存碎片,并無需額外的磁盤空間來存儲長度信息;但其短板在于會消除列末尾的空格信息。
CHAR在長度不足時會補充空格,因此,當在一個長度為10的CHAR中分別存儲"paidaxing "和"paidaxing"時,實際存儲的均為"paidaxing ",導致原空格信息喪失。
舉例來說,適合使用CHAR的情境包括存儲身份證號(固定長度)、訂單號(固定長度)以及國家編碼(固定長度)。
面試官:挺好,看來確實掌握的不錯。
派大星:嘿嘿,謝謝,就是在使用過程中有去比較了解過。畢竟如果在設計索引的時候需要考慮,具體的索引設計原則以及優化慢SQL可參考歷史文章:
日活3kw下,如何應對實際業務場景中SQL過慢的優化挑戰?
本文鏈接:http://www.tebozhan.com/showinfo-26-83781-0.html對線面試官-CHAR和VARCHAR了解嘛,區別是什么
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 聊聊架構設計流程:識別復雜度