【问题标题】:Laravel eloquent returns same row with different where clauseLaravel eloquent 返回具有不同 where 子句的同一行
【发布时间】:2015-06-06 16:34:53
【问题描述】:

我想检查用户名是否被占用,但 eloquent 对我来说很奇怪...... 在我的数据库中,只注册了一个用户,用户名是 yigitabi

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

我已经尝试过查询日志,我的两个查询日志在这里...

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) } }

我该如何解决这种情况?

【问题讨论】:

  • 如果您当前的数据库排序规则不是 UTF 8,请尝试将其设置为 utf_8_unicode_ci
  • @chanafdo 所有表都是 utf_8_unicode_ci 我将 db 更改为 utf_8_unicode_ci 但没有任何改变
  • 对不起我之前的评论。尝试将其设置为utf_8_bin
  • @chanafdo 还是一样。
  • 你是否在 Laravel 配置中将数据库的排序规则更改为上述?如果不改后试试。

标签: laravel eloquent


【解决方案1】:

MySQL matching unicode characters with ascii version 对此问题进行了精彩的讨论。

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

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

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

【讨论】:

  • patricus 谢谢,我不知道字段排序规则,当我更改字段排序规则时,我已经解决了我的问题。
猜你喜欢
  • 2020-06-23
  • 1970-01-01
  • 2020-08-18
  • 2017-05-20
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多