首先是char/varchar/text之间的区别:

char更适合于定长存储的情况,这样不会浪费存储空间,存储的时候尾部有空格会被截断。

varchar适合长度不固定的字符串存储,不会处理尾部空格,而且实际存储占用的空间会加1或2(因为要记录长度 1个字节 =8位 11111111=128+64+32+16+8+4+2+1=255 所以不超过255得就只用1个字节 redis5 String的设计原理同样是这样).

做个测试,测试下char与varchar的区别: 插入char类型的只会去除尾部的空格,前边的空格不会去除; varchar类型的前后空格都不会去除(基于Mysql8)

在mysql中,大于255的varchar字段存储上会自动转换成tinytext, (Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535) mysql的单行最大记录数是65535,不包括text,blob.所以varchar最大可定义为65532(NULL标识位,如果varchar字段定义中带有default null允许列空,则需要需要1bit来标识,每8个bits的标识组成一个字段。一张表中存在N个varchar字段,那么需要(N+7)/8 (取整)bytes存储所有的NULL标识位。如果数据表只有一个varchar字段且该字段DEFAULT NULL,那么该varchar字段的最大长度为65532个字节,即65535-2-1=65532 byte。)使用索引的时候,过长的varchar和text同样会被截断.

所以看具体情况而定,正常情况下varchar能放得下就用varchar.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐