varchar的长度会影响速度?

时间:2022-10-15 04:23:25

最近在游戏开发中碰到一个问题:策划配置的任务目标太长, 正常做任务没问题,下线再上该任务就发送些不正常的错误,最后查找原因,原来是"任务目标"字段定义长度太短, 数据被切断,导致该属性装载数据失败…

这里来总结下char,varchar的特性:

1. char固定长度, 未填满的会以空格补齐;

2. varchar长度可变, 实际长度是存入数据的长度,但最长也不会超过它的定义, 或者说,并不存在”长度自动增长”的varchar;

3. 同是varchar,定义的长度并不会影响存储的空间和速度, 因为长度值是”使用单独(1个或2个)字节进行存储”的,只有实际的数据, 会影响空间和速度;

4. sqlserver的char,空格需要trim来去掉,用得很繁琐, mysql则不需要,自动完成,使用方便;

5. varchar字段插进去什么, 检索出来就是什么,包括尾部的空格, 并不会被删除掉;

6. “有人说”固定长度存储会比可变长度要快,也就是说char比varchar快,这点没想明白, 即使varchar因为可变而容易出现碎片, 但char在检索时会却也要进行concat啊;

7. “也有人说”,使用InnoDB表, 不管保存还是检索, 在处理上char,varchar没区别(“InnoDB treats CHAR and VARCHAR the same way”), 这个貌似是官方说明(落款:Community Relations Manager, North America, MySQL Inc.), 可信度较高;

8. 并且, char只有(0,255), 需要超过255字节的,自然没得选了;

9. As above, 在mysql中使用InnoDB表,varchar类型比char综合分高: 效率无区别, 长度更长,  不多占空间. 并且,预定义长度可以大些.