符类型将数字、字母等字符以字符串的形式存储。本节主要介绍最常用的字符数据类型,包括 CHAR 和 VARCHAR 类型以及 BINARY 和 VARBINARY 类型。
CHAR 和 VARCHAR 类型
CHAR 和 VARCHAR 类型是相似的,他们的区别在于存储和取回的方式不同以及对末尾空格的处理方式不同。
CHAR 和 VARCHAR 类型都可以指定最大长度。例如 CHAR(30) 最多存储 30 个字符。
CHAR 类型的列可以指定的长度范围是 0~256,CHAR 类型是将写入的值末尾连续空格去掉后进行存储的,当取回时,如果 PAD_CHAR_TO_FULL_LENGTH SQL 模式是开启状态,会将取回的值用空格填充到最大长度。
VARCHAR 类型的列可以指定的长度范围是 0~1048576,有效的最大长度为 1048576 个字节。
对 CHAR 和 VARCHAR 类型,如果插入的数据长度超过了最大长度,当 sql_mode 包含STRICT_TRANS_TABLES 的设置时报错,当不包含该设置时会自动截取到最大长度并报警告。
在存储 VARCHAR 和 CHAR 类型时,比较方法是根据字符序的设置。
BINARY 和 VARBINARY 类型
BINARY 和 VARBINARY 类型与 CHAR 和 VARCHAR 类型相似,区别在于他们存储的是二进制数据。
BINARY 和 VARBINARY 类型的最大长度与 CHAR 和 VARCHAR 类型一样,不同的是它们的长度是按字节长度计算。
当存储 BINARY 类型时,待存储的值会在右侧补充 0x00(即 '\0')到最长长度。
当开启严格模式时,插入超过最大长度会报错。当开启非严格模式时会进行截断并报出警告。
BINARY 类型的比较是会显式比较末尾的空字节的,0x00 与空格不同,0x00 排序会排在空格之前。




