You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:00:55