varchar 和 text 均可存儲可變長度字符 65535,但是 varchar 存的位置是在數據行內,text 存儲在數據行外。
不同字符集的數據庫或表,其 varchar 的字段的長度是不固定的,雖然 varchar 可存 65535個字節,但是在 utf8 的表,其 varchar 最多 21845 字符長,因為一個文字需要 3個字節,在utf8mb4格式中,其最多可存儲 16383 字符長,因為一個文字需要 4 個字符。並且其還會有一個兩個的長度用於存長度,所以在理論的基礎上需要減1或2或3。
text 也是可存 65535 字符。
在UTF8狀態下longtext: 4294967295/3=1431655765個漢字,約14億,存儲空間占用:4294967295/1024/1024/1024=4G的數據;
在UTF8狀態下mediumtext: 16777215/3=5592405個漢字,約560萬,存儲空間占用:16777215/1024/1024=16M的數據;
在UTF8狀態下text: 65535/3=21845個漢字,約20000,存儲空間占用:65535/1024=64K的數據;
在使用UTF8字符集的時候,MySQL手冊上是這樣描述的:
- 基本拉丁字母、數字和標點符號使用一個字節;
- 大多數的歐洲和中東手寫字母適合兩個字節序列:擴展的拉丁字母(包括發音符號、長音符號、重音符號、低音符號和其它音符)、西里爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言;
- 韓語、中文和日本象形文字使用三個字節序列。
GBK編碼: 一個漢字 = 2個字節,英文是一個字節