mysql數據類型char、varchar、text的一些區別

之前有一個需求,要求輸入描述限制上限爲5000字符。由於需要新設計表結構,所以我有了一個疑問,到底設計表的時候,字段類型如何才能更合理,不浪費存儲空間,於是瞭解了一下比較常用的char、varchar、text的區別。

首先需要知道漢字和字節字符的關係,關係如下:
1、 1個漢字 = 1個字 = 1個字符
2、 1個字符 = 1個字節 = 8bit(ACSII碼下)
3、 1個字符 = 2個字節 = 16bit(Unicode碼下)

字符並不是計算機語言, 一般情況下,漢字一個字佔兩個字節。英文字母一個字母佔一個字節。

我試了下char(2)和varchar(2), 都能存2個英文字母或者2個漢字, varchar(10) 既10個字符可以存10個漢字,不太明白這個n是表示字節還是字符,查了下資料:

1、char(n)和varchar(n)中括號中n代表字符的個數,並不代表字節個數,所以當使用了中文的時候(UTF8)意味着可以插入m箇中文,但是實際會佔用m*3個字節。

2、同時char和varchar最大的區別就在於char不管實際value都會佔用n個字符的空間,而varchar只會佔用實際字符應該佔用的空間+1,並且實際空間+1<=n。

3、超過char和varchar的n設置後,字符串會被截斷。

4、char的上限爲255字節,varchar的上限65535字節,text的上限爲65535。

5、char在存儲的時候會截斷尾部的空格,varchar和text不會。

6、varchar會使用1-3個字節來存儲長度,text不會。

我使用的mysql版本是14.14,括號中的數字指的是長度,char範圍是0~255,varchar最長是64k。
char>varchar>text,但是如果使用的是Innodb引擎的話,推薦使用varchar代替char。
所以綜上這個字段設計時候我寫成了varchar(5000),雖然看起來比較奇怪,但是比text更合適一點。

參考:https://www.cnblogs.com/billyxp/p/3548540.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章