1.类型范围
2.占用字节
CHAR是定长字符串类型,不论其存放的字符串长短,统一都会占用m字节;
VARCHAR是变长字符串类型,在声明时虽然指定其长度m,仅指其能存放字符串的最长长度;
存放的字符串长度不超过255,VARCHAR会额外申请一个字节用于存放实际字符串的长度;
存放的字符串长度如超过255,会额外申请两个字节的空间用于存放实际字符串的长度;
3.截取报错
如果sql_mode未使用严格模式,则会如上表所示的样子,按最大长度截取,但是会产生警告;
如果sql_mode设置了严格模式,则会报错,如下图所示
4.保存过滤:char自动trim varchar不会
Char类型的数据在存储时会自动裁剪右侧的空格串,而VARCHAR则不会
5.数据校验
CHAR、VARCHAR、TEXT类型在进行比较时,都会自动裁剪后侧的空格串,进行比较
如果需要将右侧的空格字符串参与比较,使用like即可,如下图所示
6.存储占用
char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;
varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节。
7.应用
提前知道需要存放的数据内容,如邮政编码、彩票号码等固定位数的字符串,则可以使用char类型;
如不能确定长度的情况下,应该使用varchar;
在使用注意不超过最大长度和不到最大长度时两种类型的不同处理;
对于字符串比较时的右侧空格串裁剪规则要引起注意;