Laravel eloquent使用不同的where子句返回相同的行

时间:2015-06-06 16:34:54

标签: laravel eloquent

我想检查用户名,如果被采取,但雄辩对我来说很奇怪...... 在我的数据库中,只注册了一个用户,用户名为yigitabi

当我尝试获取用户名为yigitabi的用户时,它返回行但是 当我尝试获取用户名为yiğitabi的用户时,它返回相同的行...

我试过querylog,我的两个查询日志就在这里......

array(1) { [0]=> array(3) { ["query"]=> string(42) "select * from `users` where `username` = ?" ["bindings"]=> array(1) { [0]=> string(9) "yiğitabi" } ["time"]=> float(0.24) } }

array(1) { [0]=> array(3) { ["query"]=> string(42) "select * from `users` where `username` = ?" ["bindings"]=> array(1) { [0]=> string(9) "yigitabi" } ["time"]=> float(0.24) } }

我该如何解决这种情况?

1 个答案:

答案 0 :(得分:1)

MySQL matching unicode characters with ascii version对这个问题进行了很好的讨论。

为了使其按预期工作,您需要将排序规则从utf8_unicode_ci更改为utf8_bin。但是,您需要记住,有三种排序规则设置:一种用于数据库,一种用于每个表,然后一种用于每个字段。

更改其中一个排序规则不会影响其他排序规则。更改数据库上的排序规则不会影响在任何现有表或字段上设置的排序规则;它会更改将来表的默认排序规则。同样,更改表上的排序规则不会影响该表中任何现有字段的排序规则集;它会更改未来字段的默认排序规则。

因此,要直接解决您的问题,您需要将username字段的排序规则更改为utf8_bin。由您决定可能要更改排序规则的其他字段,表或数据库。