Mysql中char、varchar和text類型的區別總結


轉載:https://blog.csdn.net/kl_Dreaming/article/details/109465964#:~:text=char和var,空間%2B1<%3Dn。
一、基本概念
1、基礎定義

char(n)和varchar(n)中括號中n代表字符的個數,並不代表字節個數,所以當使用了中文的時候(UTF8)意味着可以插入m個中文,但是實際會占用m*3個字節。
char和varchar最大的區別就在於char不管實際value都會占用n個字符的空間,而varchar只會占用實際字符應該占用的空間+1,並且實際空間+1<=n。
超過char和varchar的n設置后,字符串會被截斷。
char在存儲的時候會截斷尾部的空格,varchar和text不會。
varchar會使用1-3個字節來存儲長度,text不會。
2、存儲空間

char,存定長,速度快,存在空間浪費的可能,會處理尾部空格,上限為255字節。(UTF-8 編碼中,一個英文字為一個字節,一個中文為三個字節)
varchar,存變長,速度慢,不存在空間浪費,不處理尾部空格,上限為65535字節,但是有存儲長度實際65532字節最大可用。255字節以下用1字節存儲長度,255字節以上用2字節存儲長度。
text,存變長大數據,速度慢,不存在空間浪費,不處理尾部空格,上限65535字節,會用額外空間存放數據長度,顧可以全部使用65535字節。
官方文檔地址,http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/storage-requirements.com.coder114.cn.html#data-types-storage-reqs-strings
3、utf8字符每個字符最多可能需要三個字節,因此 varchar 使用該utf8字符集的 列 可以聲明為最多21,844個字符。
官方文檔地址,http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/char.com.coder114.cn.html

二、場景問題
1、當varchar(n)后面的n非常大的時候我們是使用varchar好,還是text好?

從存儲上看,當varchar大於某些數值的時候,其會自動轉換為text,大概規則如下:
大於varchar(255)變為 tinytext
大於varchar(500)變為 text
大於varchar(20000)變為 mediumtext
所以對於過大的內容使用varchar和text沒有太多區別。
性能,索引會是影響性能的最關鍵因素,而對於text來說,只能添加前綴索引,並且前綴索引最大只能達到1000字節。由於會進行內部的轉換,所以long varchar其實也只能添加1000字節的索引,如果超長了會自動截斷。從索引上看其實long varchar和text也沒有太多區別。
總結,當超過255的長度之后,使用varchar和text沒有本質區別,只需要考慮一下兩個類型的特性即可(主要考慮text沒有默認值的問題),但是個人推薦使用varchar(10000),畢竟這個還有截斷,可以保證字段的最大值可控。


免責聲明!

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



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