数据库–关于varchar和char的区别
1.定长和变长
char 表示定长,长度固定;最大长度为255字符;
char(20),指的是20个字符,如果存放的字符小于20时,多余空间会自动填充空格
varchar的最大长度为65535即2^16字节,长度可变;varchar的最大长度根据编码格式决定:
MySQL中:
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)、
吐槽:4.0版本下不好用啊,用户设置长度,还得先估算一下传输数据的字节长度(除非设置长度特别大)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,
最大大小是65532字节
PS:当存储的字符长度大于以上俩种字符类型设置的长度时,皆无法存储;报错:Data too long for column ‘xxx’ at row 1
2.处理速度
因为varchar是变长,根据编码以及存储数据的长度,与最大设置的字符长度进行比较等,才会将数据存入对应的字段中,并且存储了该字段的信息长度,而char仅需比较字符长度,其余部分用空格填补,所以varchar的存储数据的操作速度,没有char迅速
3.char存储信息的优点
3.1存储很短的信息
可以采用char,因为char处理速度更快,并且不会出现较大的内存浪费(补充空格),反而是varchar在此期间的存储信息的长度计算和存储信息的长度,得不偿失;
3.2存储固定长度的信息,例如UUID
可以采用char,因为信息的长度固定,不会出现内存浪费的情况,而char本身的处理速度又比varchar快