MySQL中欄位型別char、varchar和text的區別
在MySQL中,char、varchar和text型別的欄位都可以用來儲存字元型別的資料,char、varchar都可以指定最大的字元長度,但text不可以。
它們的儲存方式和資料的檢索方式也都不一樣。
資料的檢索效率是:char
> varchar
> text
具體說明:
char:儲存定長資料很方便,CHAR欄位上的索引效率級高,必須在括號裡定義長度,可以有預設值,比如定義char(10),那麼不論你儲存的資料是否達到了10個位元組,都要佔去10個位元組的空間(自動用空格填充),且在檢索的時候後面的空格會隱藏掉,所以檢索出來的資料需要記得用什麼trim之類的函式去過濾空格。
varchar:
text:儲存可變長度的非Unicode資料,最大長度為2^31-1個字元。text列不能有預設值,儲存或檢索過程中,不存在大小寫轉換,後面如果指定長度,不會報錯誤,但是這個長度是不起作用的,意思就是你插入資料的時候,超過你指定的長度還是可以正常插入。
關於儲存空間:
在使用UTF8字符集的時候,MySQL手冊上是這樣描述的:
- 基本拉丁字母、數字和標點符號使用一個位元組;
- 大多數的歐洲和中東手寫字母適合兩個位元組序列:擴充套件的拉丁字母(包括髮音符號、長音符號、重音符號、低音符號和其它音符)、西裡爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言;
- 韓語、中文和日本象形文字使用三個位元組序列。
結論:
1、經常變化的欄位用varchar;
2、知道固定長度的用char;
3、超過255位元組的只能用varchar或者text;
4、能用varchar的地方不用text;
5、能夠用數字型別的欄位儘量選擇數字型別而不用字串型別,這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎在處理查詢和連接回逐個比較字串中每一個字元,而對於數字型而言只需要比較一次就夠了;
6、同一張表出現多個大欄位,能合併時儘量合併,不能合併時考慮分表,原因請考 優化InnoDB表BLOB,TEXT列的儲存效率
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。如果你想了解更多相關內容請檢視下面相關連結