mysql的varchar和text区别
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个字节,英文是一个字节