当前位置: 首页 > 知识库问答 >
问题:

laravel 5.4迁移工作不正常

谷梁振
2023-03-14

当我使用laravel迁移在数据库中创建表时,我遇到了这个问题。我不知道它可能有什么问题,因为我在以前的系统上使用相同的命令。这是我在使用作曲家创建表时得到的错误。

$php artisan迁移迁移表已成功创建。

[Illumb\Database\QueryException]SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节(SQL:alter tableusersadduniqueusers\u email\u uniqueemail

[PDOException]SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节

共有3个答案

马宜民
2023-03-14

若要修复此问题,请将其置于Schema::create方法调用之上:

Schema::defaultStringLength(191);

在这里阅读更多:

https://github.com/laravel/framework/issues/17508

叶书
2023-03-14

字符限制取决于您使用的字符集Laravel使用的是utf8mb4,最大索引的字符限制为191

您只需将角色限制设置为正确的。从Laravel Index Length中读取此内容

索引长度

默认情况下,Laravel使用utf8mb4字符集,其中包括对在数据库中存储“emojis”的支持。如果您运行的MySQL版本比5.7.7版本旧,或者MariaDB版本比10.2.2版本旧,您可能需要手动配置迁移生成的默认字符串长度,以便MySQL为其创建索引。您可以通过在AppServiceProvider中调用Schema::defaultStringLength方法来配置此选项:

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}

或者,您可以为数据库启用innodb\u large\u prefix选项。有关如何正确启用此选项的说明,请参阅数据库文档。

姚新霁
2023-03-14

Laravel 5.4默认使用utf8mb4。修复此错误的一种方法是默认返回utf8

转到config\database.php并将数据库charset更改为uft8,将排序规则更改为utf8\u unicode\u ci

'mysql' => [
    //..
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    //..
],

 类似资料:
  • 我是Android应用程序开发的新手,目前正在开发一个现有的Android应用程序。从Android文档链接https://developer.Android.com/distribute/best-practices/develope/target-sdk中可以看出,应用程序更新必须至少针对Android9.0。 因此,我将targetSDKVersion设置为28,并尝试运行应用程序,但res

  • 我使用openAm 9.5.4作为服务提供商,salesforce作为IDP。使用现有java 1.6版本的OpenAm,我的IDP启动了sso工作。但是,当我们将openAm的java版本迁移到1.7时,sso失败,错误为“HTTP状态500-单点登录失败”。java版本更改可能会导致什么问题? 我想确认的一个更重要的问题是,OpenAm 9.5.4是否在Java1.7上支持SSO?有人尝试过这

  • 我在stackoverflow中搜索了一个类似的问题,但没有找到,不同情况下的其他可能解决方案也不适合我。我打开这个问题是因为我找不到这个问题的解决方案,也找不到这个问题的类似问题。 我尝试过使用Android Room的自动迁移功能,但它从未正常工作。 目前的情况如下: 我有一个数据库版本1 我想向一个表添加一个新列,这是我想做的唯一修改。此列将保存字符串值,而不保存其他任何内容。 此新列将仅存

  • 如果运行,它会失败 未找到基表或视图:1146表*.迁移不存在。 数据库是空的。 如果我运行我会看到迁移表,但它是空的。 DB显示迁移表,但它是空的。 如果我再次运行,数据库再次为空,我会得到相同的错误: 未找到基表或视图:1146表*.迁移不存在。 也许有人知道这里发生了什么。

  • 我们有一个数据库,其中有一个名为Students的表,其中包含id、name、age和school列。 现在我想编写一个迁移脚本,将3列(假设我有数百万条记录)从Students表复制到New_Students表。 下面是我编写的示例脚本。这是一个错误 当在crateDb管理UI中执行上面的命令时,我得到下面的错误 以上语句在单独执行时有效。 问题: 为什么上面的多个语句不起作用,但是当单独键入时

  • 最近,我尝试将firebase云函数从javascript迁移到typescript,并将函数拆分为多个文件。然而,我在尝试服务和部署时不断出错: 服务时的错误: 函数[FunctionName]:函数被忽略,因为fiRecovery模拟器不存在或未运行。函数[FunctionName]:函数被忽略,因为Firebase模拟器不存在或未运行。 部署时出错: 已尝试: Firestore/Fireb