我正在努力学习Laravel 5.4
。在我发布命令php artisan make:auth
和命令php artisan migrate
之后,会显示以下错误,并且一些数据库表不会变大:
〔Illuminate\Database\QueryException〕
SQLSTATE〔42000〕:语法错误或访问冲突:1071指定的密钥太长了;最大密钥长度为767字节(SQL:alter tableusers
添加唯一的users_email_unique
(
SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长了;最大密钥长度为767字节
关于我需要使用一些列作为具有Persian Script Font
的字符的容器(其他一些列包含英语、西班牙语…字符)的事实,我创建了具有utf8_general_ci
的MySQL
数据库,我认为错误是由于数据库的编码而引发的。你能告诉我我将使用什么character encoding
来构建数据库,以便能够利用Laravel的Auth功能吗?事先非常感谢。
让我们看看SHOW CREATE TABLE
,这样我们就可以看到email
的定义。
同时,我猜它包括类似的东西
email VARCHAR(255) CHARACTER SET utf8mb4,
INDEX(email)
做其中一个(每个都有缺点):
- 255->191(但请确保您当前没有更长的地址)
- utf8mb4->utf8(因此禁止表情符号和某些汉字)
- INDEX(电子邮件(20))(如果是
UNIQUE
或PRIMARY KEY
,请不要选择此选项) - 可以重新配置服务器和表(如果在5.6.3之后)以允许更大的索引;直到5.7.7,这才是"默认">
Laravel 5.4对此错误有一个记录在案的问题。
对于遇到这个问题的其他人来说,这也是一个很好的解决方案:
- 打开您的
appProviderAppServiceProvider.php
-
将其更改为:
<?php namespace AppProviders; use IlluminateSupportFacadesSchema; use IlluminateSupportServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); // } /** * Register any application services. * * @return void */ public function register() { // } }
-
再次运行迁移