簡體   English   中英

COLLATION 'utf8mb4_general_ci' 對 CHARACTER SET 'binary' 無效

[英]COLLATION 'utf8mb4_general_ci' is not valid for CHARACTER SET 'binary'

我想通過搜索“Ylmaz”找到一個用戶在我Laravel應用程序名稱為“Yılmaz”

默認在 Laravel 中(使用utf8mb4_unicode_ci作為我的連接的排序規則)這個

\App\User::whereRaw('name LIKE ?', '%Yilmaz%')->get();

什么都不返回。

正如我在MySQL 中發現的那樣,我不會將 ı 視為 i? ,它適用於整理utf8mb4_general_ci 但是,不建議使用utf8mb4_general_ci作為默認排序規則,因為它不准確排序

我的第一次嘗試是

\App\User::whereRaw('name LIKE ? collate utf8mb4_general_ci', '%Yilmaz%')->get();

但這會拋出

SQLSTATE[42000]:語法錯誤或訪問沖突:1253 COLLATION 'utf8mb4_general_ci' 對 CHARACTER SET 'binary' 無效(SQL:從名稱 LIKE %Yilmaz% collat​​e utf8mb4_general_ci 的users中選擇 *)

接下來,我嘗試了https://stackoverflow.com/a/58493518/2311074

\App\User::whereRaw('name LIKE convert(? using utf8mb4)', '%Yilmaz%')->get();

但這會返回

SQLSTATE[HY000]:一般錯誤:1267 排序規則 (utf8mb4_unicode_ci,IMPLICIT) 和 (utf8mb4_general_ci,IMPLICIT) 的非法混合用於操作“like”(SQL:選擇 * from users where name LIKE convert(%Yilmaz% using utf8mb4))

如何在 Laravel 中僅針對一個查詢將排序utf8mb4_general_ci更改為utf8mb4_general_ci

兩者的結合對我有用:

\App\User::whereRaw(
    'name LIKE convert(? using utf8mb4) collate utf8mb4_general_ci',
    '%Yilmaz%'
)->get();

但我不確定這是否是最好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM