【发布时间】:2020-04-24 01:45:02
【问题描述】:
我之前没有具体看到过这个问题,但是
SQLSTATE[HY000]:一般错误:1267 非法混合排序规则 (latin1_swedish_ci,IMPLICIT) 和 (utf8_unicode_ci,COERCIBLE) 用于操作“=”(SQL:
select `id` from `data` where `thing` = خ@gmail.com limit 1
我很确定 خ@gmail.com 不是有效的电子邮件地址,但我不太确定 Laravel 的 DB 函数为什么会将它传递给我的服务器。它不应该知道它正在使用的数据库的字符集和排序规则吗?将字符集和排序规则更改为 UTF-8 以便这不会在我的 MySQL 服务器上导致一般错误是正确的解决方案吗?
对于正确的字符集和排序规则应该是什么达成共识?
【问题讨论】:
-
不需要用引号封装值吗?
where 'thing' = 'خ@gmail.com' -
您应该始终使用
utf8mb4 -
嗨,我正在使用 Laravel 的 DB:: 并且这只是错误消息的输出,而不是正在使用的实际查询。 Laravel 正在处理“报价”。
-
当 Laravel 使用准备好的语句输出失败的查询时,它不会在值周围显示引号。很难通过将查询复制/粘贴到命令行来进行故障排除,因为您必须手动引用内容。
-
检查表/列的定义。它应该是 utf8_unicode_ci,但它可能设置为 latin1_swedish_ci。
标签: php mysql laravel character-encoding collation