
虽然插入了两条不足10个字符的数据,但是MySQL在存储char类型数据时,仍然占用10个字符个空间,它在不足10个字符的右边添加空白字符补足10个字符长度,所以char类型存储时的长度是固定的。
可以如下查询字符长度:

有人肯定要问,刚刚不是说每个值都应该是10个字符长度吗?没错。但是MySQL在查询char类型数据时,默认做了一个处理,它将值后面的所有空格全部移除,然后再将结果返回给我们。
也就是上面的这个结果。可以如下来取消这个处理

图中竖线是鼠标光标位置,光标前面就是10个空白字符。
varchar类型和char类型非常相似。如下创建一张表t2

varchar类型能够存储最多65535个字符,但是需要注意,不是每个表的字段都能申请到这个长度,因为MySQL对单行的大小限制为65535个字节,也就是表的一行的所有字段大小的和不能超过65535个字节。如果其他字段已经申请了比较大的空间,那么c1字段可能就不能申请65535个字符空间了。
(1)存储超过定义时指定长度的字符
这个由sql_mode决定,在strict mode下,插入失败并报错,在非strict mode会插入成功,超过部分会被截取掉,如图:
strict mode:

重新设置sql_mode变量,再插入:

binary类型和char类型很相似,binary类型存储的是字节串而不是字符串,存储的最大字节串长度也是255,binary类型存储不足长度的值时也是在值的右边进行补全,不过用于补全的值是0x00(字符表示为'\0'),但查询时会保留尾部补全的值。
例如对于BINARY(3),插入'a '时,存储的是'a \0',插入'a\0'时,存储的是'a\0\0',查询时分别是'a \0'和'a\0\0'。
可以如下验证

说明查询到的是'a\0\0',不过显示的是a。
varbinary和varchar类似,存储的是字节串,存储的最大字节长度为65535,存储实际定义的字节长度,不会在尾部用'\0'补全,查询时当然也就没有移除尾部补全的值。
blob类型可以看成是varbinary类型,可以存储超大二进制数据。
根据存储长度不同又分为四种: TINYBLOB, BLOB, MEDIUMBLOB, 和 LONGBLOB。
text可以看成是varchar,可以存储超大的字符串数据。
根据存储长度不同又分为四种:TINYTEXT, TEXT,MEDIUMTEXT和 LONGTEXT.
枚举类型主要用于某个列的取值只有有限的几个,比如表示星期几的列,只会是星期一,星期二,…,星期日这个值。
可以如下创建枚举类型:

当插入的值不在枚举类型中,size中会是空白。可以通过索引进行查询:

从结果来看,集合类型中的集合就是数学中的集合,满足无序和不重复。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。