照亮\数据库\查询异常 SQLSTATE [42000]

Posted

技术标签:

【中文标题】照亮\\数据库\\查询异常 SQLSTATE [42000]【英文标题】:Illuminate\Database\QueryException SQLSTATE[42000]照亮\数据库\查询异常 SQLSTATE [42000] 【发布时间】:2019-03-08 11:55:30 【问题描述】:

我正在使用 Laravel,当我尝试运行 php artisan make:migrate 时,它显示此错误:

Illuminate\Database\QueryException : SQLSTATE[42000]: 语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节(SQL:alter table users add unique users_email_unique(email))

在 /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664

  660|    // If an exception occurs when attempting to run a query, we'll format the error
  661|    // message to include the bindings with SQL, which will make this exception a
  662|    // lot more helpful to the developer instead of just the database's errors.
  663|    catch (Exception $e) 
> 664|        throw new QueryException(
  665|            $query, $this->prepareBindings($bindings), $e
  666|        );
  667|    
  668|

异常跟踪:

1 PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes") /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

2 PDOStatement::execute() /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

请使用参数-v 查看更多详情。

【问题讨论】:

你能告诉我们你的迁移代码吗? 请添加用户迁移代码 Laravel migration: unique key is too long, even if specified的可能重复 #1071 - Specified key was too long; max key length is 767 bytes的可能重复 【参考方案1】:

进入App\Providers\AppServiceProvider 类并将引导方法更改为如下所示

public function boot()

    Schema::defaultStringLength(191);

【讨论】:

非常感谢您的帮助!它对我有用。 添加了命名空间:\Illuminate\Support\Facades\Schema::defaultStringLength(191); 您可以在 PHP 文件顶部添加`use Illuminate\Support\Facades\Schema;`,而不是指定Schama 类的完整限定名【参考方案2】:

转到您的 laravel 项目并在该项目中打开 App\Providers\AppServiceProvider 类并更改引导方法并在图像中添加新的模式显示。

在顶部添加这一行

use Illuminate\Support\Facades\Schema;

替换此方法

public function boot() Schema::defaultStringLength(191);

【讨论】:

【参考方案3】:

找到文件 config/database.php 并将字符集和排序规则从 utf8mb4 更改为 utf8

'charset' => 'utf8', 'collat​​ion' => 'utf8_unicode_ci',

【讨论】:

以上是关于照亮\数据库\查询异常 SQLSTATE [42000]的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [23000]:完整性约束违规:1048 laravel 5.7

一般错误:1005 无法创建表

laravel 迁移:回滚错误

为啥我的查询因 SQLCODE = -420 而失败?

laravel php工匠错误

Laravel 5.4 迁移错误 [42501]