【问题标题】:Mysql import of laravel voyager database error - Specified key was too long; max key length is 767 bytesMysql 导入 laravel voyager 数据库报错-Specified key was too long;最大密钥长度为 767 字节
【发布时间】:2017-11-19 04:43:50
【问题描述】:

由于指定的密钥太长,似乎无法将 laravel 数据库上传到实时服务器。 SQL ERROR 示例表明键约束太长,但它不仅在一个表上,而且在许多表上。有没有办法更新这个或更改我的数据库以便能够上传它?我遵循了应用服务提供商中的指南,但我不确定是否必须删除数据库,然后使用应用服务提供商上的 boot() 方法的键约束再次迁移。请帮忙。

【问题讨论】:

    标签: php mysql laravel syntax-error voyager


    【解决方案1】:

    事实上,将 defaultStringLength 添加到引导方法确实有效,但是因为我使用的是供应商脚本,所以我无法回滚我的迁移,因为迁移是由 Voyager 中的 BREAD 控制器创建的。为了使 MYSQL 导入正常工作,而不会丢失数据或滚动并更改我必须手动使用 Sequel Pro 或您使用的任何工具的迁移,并手动将每个 varchar('255') 更改为 varchar('191')

    这使我免于删除和回滚。

    添加:

    use Illuminate\Support\Facades\Schema; // add this 
    
    Schema::defaultStringLength(191);
    

    到 AppServiceProvider.php 将从现在开始工作,因为我使用 BREAD 控制器创建的任何其他迁移都将默认 191 添加到字符串长度。

    供参考:https://laravel-news.com/laravel-5-4-key-too-long-error

    【讨论】:

      【解决方案2】:

      在AppServiceProvider的启动方法中添加defaultStringLength

      use Illuminate\Support\Facades\Schema; // add this 
      
      Schema::defaultStringLength(191);
      

      回滚迁移并在添加此行后重试。它会起作用的。

      【讨论】:

      • 只关心这样做,重新上传数据,由于保存的sql状态而出现同样的问题
      • 我以前做过这个,所以我可以告诉你它会正常工作。只需回滚您的迁移文件并重试。这是新的 laravel 设置?
      • 你可以看看这个问题:github.com/laravel/framework/issues/17508
      • 不,它不是新鲜的,它是一个项目,我正在使用 voyager 包,所以它更棘手,因为他们有自己的迁移,所以目前在回滚时出错。
      • 谢谢。我认为它只需要修补设置即可工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 2018-12-12
      • 2019-02-21
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      相关资源
      最近更新 更多