转载自百度回答——靠名真tm难起
1.首先要明确的区别是,char的长度是不可变的,而varchar的长度是可变的。举例子,比如我们定义了一个char[10]和一个varchar[10],如果我们存进去的是'abcd'则char所占的长度依旧是10,后面的6位为空格;而varchar尽管我们定义的是是,但是此时的长度变为了4。在我们取数据的时候,char我们需要用trim()去掉多余的空格,而varchar不需要。
2.char的存取速度比varchar的速度要快上许多。原因在于两者的区别。由于char的长度固定,程序对char的存储和查找都十分方便快捷;但是char也付出了空间的代价。因为长度固定,难免会有冗余的空格占据空间。所以char是以空间换时间,而varchar是以空间效率为首位的。
3.char的存取方式和varchar不同。对于英文字符(ASCII)来说,以char类型存储时占据1个字节,而对于varchar类型占据2个字节。对于汉字来说,char类型和varchar类型都占据两个字节。两者存储的数据都为unicode字符数据。