Я пытаюсь создать систему учетных записей, которая позволяет создавать только уникальные имена пользователей. Раньше SQL-запросы были нечувствительны к регистру, но после изменения кодировки на utf8mb4 он чувствителен к регистру, что означает, что люди могут использовать повторяющиеся имена пользователей. (Я перешел на utf8mb4, чтобы разрешить смайлики и другие символы в пользовательских биосах, поэтому возврат к старой кодировке невозможен)
Я пытался изменить сортировку соединения, однако все, что я пробовал, дает мне ошибку 500. Мне нужно что-то, что не потребует от меня добавления «strtolower ($ username)» в каждый запрос.
Пример запроса:
if(DB::table('users')->where('username', $username)->count() > 0){
return response()->json(['status'=>'error','message'=>'Username is taken']);
}
Конфигурация SQL:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
Когда пользователь пытается использовать повторяющееся имя пользователя, сервер должен вернуть:
{'статус': 'ошибка, 'сообщение': 'Имя пользователя занято'}
но пользователь фактически может создать учетную запись.
SHOW CREATE TABLE
и пример проблемной пары имен пользователей. - person Rick James   schedule 20.08.2019