数据库系列之MySQL数据库Varchar类型尾部空值问题

背景:研发人员在执行SQL语句“select xx from tb where c1=’aaa ’”查询时,发现并不能只查询出’aaa ’这样的字符串,而是把所有’aaa’这样的查出来。首先不管开发人员在插入数据的时候有没有进行去掉首尾字符串的处理,在MySQL 8.0版本中查询时会忽略掉字符串最后的空格,所以导致’aaa’+空格作为查询条件时和’aaa’为同一效果。为什么会出现这样的问题?


1、Char和Varchar的区别

MySQL数据库中char和varchar类型主要在存储方式和性能上有区别,主要有以下:

  • 存储方式:
    • CHAR:CHAR类型用于存储固定长度的字符序列。当你定义一个CHAR(M)字段时,MySQL会为该字段分配M个字符的空间,并使用空格来填充未达到长度的部分。例如,如果你有一个CHAR(10)字段并插入字串"Hello",MySQL会存储 "Hello "(注意尾部的空格)。
    • VARCHAR:VARCHAR类型用于存储可变长度的字符序列。当你定义一个VARCHAR(M)字段时,MySQL只会为该字段分配M个字符加上一个或两个额外字节的空间(用于存储字符串的长度)。如果字符串长度小于M,则只会使用必要的空间。例如,如果你有一个VARCHAR(10)字段并插入字符串"Hello",MySQL只会储"Hello"(没有额外的空格)。
  • 性能:
    • CHAR:由于CHAR字段的长度是固定的,所以在查询和比较时通常更快,因为MySQL可以直接定位到数据的位置࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值