Laravel Eloquent问题:如何在MySQL中进行列值不区分大小写的记录查询?
在Laravel中实现MySQL不区分大小写的查询
针对你的需求,这里有几种符合Laravel风格的解决方案(MySQL本身不支持ILIKE,该运算符属于PostgreSQL):
方法1:使用whereRaw统一转为小写比较
通过将数据库字段和查询关键词都转为小写,彻底避免大小写敏感问题:
$keyword = 'example'; $records = MyModel::whereRaw('LOWER(column_name) = LOWER(?)', [$keyword])->get();
这种方式利用MySQL的LOWER()函数,兼容性强,不受表排序规则(collation)的影响。
方法2:结合DB::raw与where链式调用
借助DB::raw处理字段的大小写转换,同时手动将关键词转为小写,写法更贴近Laravel风格:
use Illuminate\Support\Facades\DB; $keyword = 'example'; $records = MyModel::where(DB::raw('LOWER(column_name)'), '=', strtolower($keyword))->get();
方法3:临时指定不区分大小写的排序规则
如果你的表使用了区分大小写的排序规则(如utf8mb4_bin),可以在查询时临时切换为不区分大小写的规则:
$keyword = 'example'; $records = MyModel::where('column_name', 'COLLATE utf8mb4_general_ci', $keyword)->get();
注意:需根据数据库实际字符集调整排序规则,比如使用utf8字符集时对应utf8_general_ci。
方法4:模糊查询场景的处理
如果需求是模糊匹配而非精确匹配,可结合LIKE使用:
$keyword = 'example'; $records = MyModel::where('column_name', 'LIKE', "%{$keyword}%")->get();
若数据库排序规则为_ci结尾(默认不区分大小写),该写法直接生效;若为区分大小写的规则,同样可以转小写处理:
$records = MyModel::whereRaw('LOWER(column_name) LIKE LOWER(?)', ["%{$keyword}%"])->get();
内容的提问来源于stack exchange,提问作者Parth
相关产品推荐
相关产品推荐

