区分大小写在laravel中的语句

And*_*ing 16 php mysql case-sensitive eloquent laravel-4

如何与laravel进行区分大小写的字符串匹配?


SELECT * FROM `invites` WHERE `token`='OGwie2e2985tOEGewgu23hUFs'

可以做到

Invite::where('token',$token)->first()


如果我想要一个区分大小写的匹配,我需要使用这样的语句(或者类似的,据我所知):

SELECT * FROM `invites` WHERE BINARY `token`='OGwie2e2985tOEGewgu23hUFs'

我最好的猜测是:

Invite::whereRaw("BINARY `token`='{$token}'")->first()

但后来我的意见没有通过准备好的声明,对吧?

Mar*_*ker 24

你需要使用DB :: raw(),也许就像这样

Invite::where(DB::raw('BINARY `token`'), $token)->first();
Run Code Online (Sandbox Code Playgroud)

或者:

Invite::whereRaw("BINARY `token`= ?",[$token])->first()
Run Code Online (Sandbox Code Playgroud)

  • 注意,这不会使用索引。 (2认同)
  • 要使用表上定义的索引,请使用 ```Invite::whereRaw("`token`= BINARY ?",[$token])->first()``` 代替 (2认同)

小智 13

有点晚了,但这不是一个更好的选择吗?

Invite::whereRaw("BINARY `token`= ?", array($token))->first()
Run Code Online (Sandbox Code Playgroud)


Bla*_*ake 11

我知道这个问题很老了,但以防万一有人偶然发现它。在撰写本文时,Laravel 是版本 8,这是有效的:

在您的迁移中:

$table->string("token")->charset("utf8")->collation("utf8_bin")->nullable();
Run Code Online (Sandbox Code Playgroud)

如果您尚未处理现有架构,这将实现区分大小写,而无需修改每个查询。由于该问题没有提供有关结构是否已创建的上下文,因此如果您始终希望查询列时区分大小写,则可以应用此方法。