MySQL的char与varchar:类型长度 记录字节 截取报错 保存trim 数据校验 存储占用

1.类型范围

MySQL的char与varchar:类型长度 记录字节 截取报错 保存trim 数据校验 存储占用_第1张图片

2.占用字节

CHAR是定长字符串类型,不论其存放的字符串长短,统一都会占用m字节;

VARCHAR是变长字符串类型,在声明时虽然指定其长度m,仅指其能存放字符串的最长长度;

存放的字符串长度不超过255,VARCHAR会额外申请一个字节用于存放实际字符串的长度;

存放的字符串长度如超过255,会额外申请两个字节的空间用于存放实际字符串的长度;

MySQL的char与varchar:类型长度 记录字节 截取报错 保存trim 数据校验 存储占用_第2张图片

3.截取报错

如果sql_mode未使用严格模式,则会如上表所示的样子,按最大长度截取,但是会产生警告;

如果sql_mode设置了严格模式,则会报错,如下图所示

MySQL的char与varchar:类型长度 记录字节 截取报错 保存trim 数据校验 存储占用_第3张图片

4.保存过滤:char自动trim varchar不会

Char类型的数据在存储时会自动裁剪右侧的空格串,而VARCHAR则不会

MySQL的char与varchar:类型长度 记录字节 截取报错 保存trim 数据校验 存储占用_第4张图片

5.数据校验

CHAR、VARCHAR、TEXT类型在进行比较时,都会自动裁剪后侧的空格串,进行比较

MySQL的char与varchar:类型长度 记录字节 截取报错 保存trim 数据校验 存储占用_第5张图片

如果需要将右侧的空格字符串参与比较,使用like即可,如下图所示

MySQL的char与varchar:类型长度 记录字节 截取报错 保存trim 数据校验 存储占用_第6张图片

6.存储占用

char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;

varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节。

7.应用

提前知道需要存放的数据内容,如邮政编码、彩票号码等固定位数的字符串,则可以使用char类型;

如不能确定长度的情况下,应该使用varchar;

在使用注意不超过最大长度和不到最大长度时两种类型的不同处理;

对于字符串比较时的右侧空格串裁剪规则要引起注意;

你可能感兴趣的:(MySQL)