三者空間占用方面:
char:存儲定長數據很方便,CHAR字段上的索引效率極高,可以有默認值,比如定義char(10),那么不論你存儲的數據是否達到了10個字節,都要占去10個字節的空間(自動用空格填充),且在檢索的時候后面的空格會隱藏掉,所以檢索出來的數據需要記得用strip()之類的函數去過濾空格。
varchar:存儲變長數據,但存儲效率沒有CHAR高。保存數據的時候,不進行空格自動填充,而且如果數據存在空格時,當值保存和檢索時尾部的空格仍會保留。另外,varchar類型的實際長度是它的值的實際長度+1,這一個字節用於保存實際使用了多大的長度。
text:存儲可變長度的非Unicode數據,最大長度為2^31-1個字符。存儲或檢索過程中,不存在大小寫轉換。
[補充]UTF8字符:
基本拉丁字母、數字和標點符號使用一個字節;
大多數的歐洲和中東手寫字母適合兩個字節序列:擴展的拉丁字母(包括發音符號、長音符號、重音符號、低音符號和其它音符)、西里爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言;
韓語、中文和日本象形文字使用三個字節序列。
總結:
盡量用varchar,能用varchar的地方不用text
char最大255個字符
varchar最大65535個字節(因此不同字符集,所能存儲的字符個數是不同的)
text最大65535字符
確定最大長度限制是字符還是字節的例子,可以參考這篇文章
References:
MySQL中char、varchar和text的區別
MySQL CHAR和VARCHAR那些事
mysql類型varchar()與text有什么區別?[12樓]