【发布时间】:2019-12-25 03:36:50
【问题描述】:
我正在尝试创建一个只允许创建唯一用户名的帐户系统。 SQL 查询过去不区分大小写,但在将字符集更改为 utf8mb4 后,它区分大小写,这意味着人们可以使用重复的用户名。 (我更改为 utf8mb4 以允许在用户 BIOS 中使用表情符号和其他符号,因此无法选择恢复为旧字符集)
我已尝试更改连接排序规则,但我尝试的所有操作都会出现错误 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,
],
当用户尝试使用重复的用户名时,服务器应返回:
{'status': 'error, 'message': '用户名被占用'}
但用户实际上可以创建帐户。
【问题讨论】:
-
请提供
SHOW CREATE TABLE和有问题的用户名对示例。
标签: php sql laravel character-encoding utf8mb4