Illuminate\Database\QueryException SQLSTATE[42000]

6 浏览
0 Comments

Illuminate\Database\QueryException SQLSTATE[42000]

我正在使用Laravel,当我尝试运行php artisan make:migrate时,显示出如下错误:\n

\nIlluminate\\Database\\QueryException : SQLSTATE[42000]: 语法错误或访问违规:1071 指定的键太长;最大键长度为767字节 (SQL: alter table users add unique users_email_unique(email)) \nat /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664\n

\n

  660|    // 如果在运行查询时发生异常,我们将格式化错误消息以包含SQL中的绑定,这将使开发人员比仅仅看到数据库错误更加有帮助。
  661|    // 抛出一个查询异常。
  662|    // 这样将使开发人员对于异常有更多的帮助,而不仅仅是数据库的错误。
  663|    catch (Exception $e) {
> 664|        throw new QueryException(
  665|            $query, $this->prepareBindings($bindings), $e
  666|        );
  667|    }
  668|

\n异常追踪:\n

\n1 PDOException::(\"SQLSTATE[42000]: 语法错误或访问违规:1071 指定的键太长;最大键长度为767字节\")
\n /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458 \n2 PDOStatement::execute()
\n /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458 \n

\n请使用参数-v来查看更多详细信息。

0
0 Comments

(Illuminate\Database\QueryException SQLSTATE[42000])问题的出现原因是数据库的字符集和排序规则不匹配。解决方法是在配置文件config/database.php中将字符集和排序规则从utf8mb4改为utf8。

具体操作步骤如下:

1. 打开文件config/database.php,可以使用文本编辑器或代码编辑器进行编辑。

2. 找到以下代码片段:

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

3. 将上述代码片段中的'charset'和'collation'的值分别改为utf8和utf8_unicode_ci,修改后的代码如下:

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',

4. 保存文件并关闭编辑器。

通过以上操作,我们将数据库的字符集和排序规则从utf8mb4修改为utf8,解决了(Illuminate\Database\QueryException SQLSTATE[42000])问题。

0
0 Comments

在Laravel项目中,遇到(Illuminate\Database\QueryException SQLSTATE[42000])这个问题,可能是由于数据库默认字符串长度不足引起的。解决方法如下:

1. 打开项目中的App\Providers\AppServiceProvider类。

2. 在类的顶部添加以下代码:use Illuminate\Support\Facades\Schema;

3. 替换原来的boot方法,改为以下代码:

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

4. 保存文件并重新运行项目,问题应该得到解决。

通过以上操作,我们可以解决(Illuminate\Database\QueryException SQLSTATE[42000])这个问题,使得Laravel项目能够正常运行。

0
0 Comments

问题:(Illuminate\Database\QueryException SQLSTATE[42000])的出现原因是什么?如何解决?

原因:该问题的出现是因为在数据库迁移或操作过程中,字符串的长度超过了数据库的默认长度限制。

解决方法:在`App\Providers\AppServiceProvider`类中的`boot`方法中添加以下代码:

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

如果加上了命名空间,则代码应该是这样的:

\Illuminate\Support\Facades\Schema::defaultStringLength(191);

也可以在PHP文件的顶部添加`use Illuminate\Support\Facades\Schema;`,而不是指定完全限定名称。

感谢您的帮助!这对我有用。

0