MySQL某些字符导致"非法混合排序规则"错误



我以前没有特别看到这个问题,但是

SQLSTATE[HY000]:一般错误:1267 utf8_unicode_ci latin1_swedish_ci操作"="(SQL:

select `id` from `data` where `thing` = خ@gmail.com limit 1

我很确定خ@gmail.com 不是一个有效的电子邮件地址,但我不太确定为什么Laravel的数据库函数将其传递给我的服务器。它不应该知道它使用的数据库的字符集和排序规则吗?将字符集和排序规则更改为 UTF-8 的正确解决方案,这样就不会在我的 MySQL 服务器上导致一般错误?

对于正确的字符集和排序规则应该是什么,是否有任何共识?

连接和列定义都需要CHARACTER SET utf8(或utf8mb4(。 从错误消息中,我看到其中一个显然是latin1

在拉拉维尔的配置中:

在文件配置/数据库中.php: 'mysql' => [..., 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', ...]

请提供SHOW CREATE TABLE来讨论该表。

如果您最终得到乱码,请参阅UTF-8字符的问题;我看到的不是我存储的内容

叮叮当当的啤酒杯 (🍻( 需要 utf8mb4 而不是 utf8。 (utf8mb4 是 utf8 的超集。

最新更新