区别:char:1、char(5)表示存储定长的5个字符.占用更多的存储空间
2、char中不足5个用空格补齐,char(5)的空格表示占位不算一个字符
3、char是固定长度的,没有长度变化的损耗,实际性能是要优于varchar的
varcahr:1、varchar(10)表示存储最长为10个的变长的字符,存储多少个就是多少个
2、varchar中空格也按一个字符存储
3、varchar的优点在于数据长度不定的情况下存储占用空间小;各有各的优点, 比如存储类似于uuid那种长度固定的,这种情况char是要优于varchar的
面试官:你平常定义varchar的长度会怎么定义呢?
会根据实际使用的最长长度来定义,比如确定最长很接近100但是不会超过100,那就定义100;
面试官:你刚刚有说到varchar的长度是变化的,存多少就是多少,既然这样那么为什么不直接定义1000或者更大呢?反正存储的长度都会是实际存储的长度,varchar(100)和varchar(1000)会有什么不同吗?
1.确实在存储的过程中varchar都是按照实际的长度存储,但是当数据加载出来进行使用的时候却不是这样,varchar(1000)占用的内存会大于varchar(100),尤其在建立索引的时候如果没有限制索引的大小,那么索引长度会默认采用的该字段的长度,也就是说varchar(1000)建立的索引存储大小要比varchar(100)建立索引存储大小大的多,加载索引使用的内存也更多。
2.另外,所有的列中的所能使用的长度总和是有限的,如果设置的varchar占用的过多,那么其他的列就必须要少,否则会报错无法创建。
面试官:那int(10)和他们有什么不同呢?
int(10)中的10指的是显示的长度,和实际存储的长度没有关系,但是char和varchar中的10时表示的存储长度;