COLLATION 'utf8mb4_general_ci' 对 CHARACTER SET 'binary' 无效
COLLATION 'utf8mb4_general_ci' is not valid for CHARACTER SET 'binary'
我想通过搜索 "Yilmaz"
在我的 Laravel 应用程序中找到名称为 "Yılmaz" 的用户
在 Laravel 中默认(使用 utf8mb4_unicode_ci
作为我连接的排序规则)this
\App\User::whereRaw('name LIKE ?', '%Yilmaz%')->get();
returns 没什么。
正如我在 , it works with collation utf8mb4_general_ci
. However, it is not recommended to use utf8mb4_general_ci
as default collation because it is not accuratly sorting 中发现的那样。
我的第一次尝试是
\App\User::whereRaw('name LIKE ? collate utf8mb4_general_ci', '%Yilmaz%')->get();
但这会抛出
SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_general_ci' is not valid for CHARACTER SET 'binary' (SQL: select * from users
where name LIKE %Yilmaz% collate utf8mb4_general_ci)
接下来,我尝试了
\App\User::whereRaw('name LIKE convert(? using utf8mb4)', '%Yilmaz%')->get();
但是这个returns
SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation 'like' (SQL: select * from users
where name LIKE convert(%Yilmaz% using utf8mb4))
如何仅针对一个查询将 Laravel 中的排序规则更改为 utf8mb4_general_ci
?
两者结合对我有用:
\App\User::whereRaw(
'name LIKE convert(? using utf8mb4) collate utf8mb4_general_ci',
'%Yilmaz%'
)->get();
但我不确定这是否是最好的方法。
我想通过搜索 "Yilmaz"
在我的 Laravel 应用程序中找到名称为 "Yılmaz" 的用户在 Laravel 中默认(使用 utf8mb4_unicode_ci
作为我连接的排序规则)this
\App\User::whereRaw('name LIKE ?', '%Yilmaz%')->get();
returns 没什么。
正如我在 utf8mb4_general_ci
. However, it is not recommended to use utf8mb4_general_ci
as default collation because it is not accuratly sorting 中发现的那样。
我的第一次尝试是
\App\User::whereRaw('name LIKE ? collate utf8mb4_general_ci', '%Yilmaz%')->get();
但这会抛出
SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_general_ci' is not valid for CHARACTER SET 'binary' (SQL: select * from
users
where name LIKE %Yilmaz% collate utf8mb4_general_ci)
接下来,我尝试了
\App\User::whereRaw('name LIKE convert(? using utf8mb4)', '%Yilmaz%')->get();
但是这个returns
SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation 'like' (SQL: select * from
users
where name LIKE convert(%Yilmaz% using utf8mb4))
如何仅针对一个查询将 Laravel 中的排序规则更改为 utf8mb4_general_ci
?
两者结合对我有用:
\App\User::whereRaw(
'name LIKE convert(? using utf8mb4) collate utf8mb4_general_ci',
'%Yilmaz%'
)->get();
但我不确定这是否是最好的方法。