这实际上是我的错,我之前没有想到,我的远程服务器MySQL版本(在共享主机上)是,但我的本地MySQL版本是。5.5.65.7.19
我开发了一个Laravel()Web应用程序,在第一次运行时就运行了迁移,但由于它完全是一个个人项目,我继续手动修改数据库的位置和方式,(但是不记录,我也一直在更改迁移文件,尽管我从未在第一个实例之后运行过它们)。v6.6.0
我从其他一些表中迁移了所有数据,我的应用程序已准备好部署。但是,当我导出本地数据库表并将其导入远程数据库时,它给了我一个众所周知的错误:
指定的密钥太长;最大密钥长度为 767 字节
我实际上忽略了它,因为所有表都很好地导入了。但最近我发现了它的警告 - 所有和都不存在在我的远程数据库中。AUTO_INCREAMENTPRIMARY_KEY
我搜索了我所能搜索的内容,但所有的解决方案都建议删除数据库并使用UTF-8再次创建它,实际上不可能是我的情况。像下面的PHP-way这样的解决方案也不是我的情况,因为我在收到错误时使用PHPMyAdmin导入我的表:
// File: app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
我还尝试在目标数据库上运行以下命令:
SET @global.innodb_large_prefix = 1;
但是没有运气。我还尝试替换本地文件的所有实例:.sql
从 到 和utf8mb4utf8
从 到utf8mb4_unicode_ciutf8_general_ci
但又没有找到运气。
错误具体来自哪里,实际上更长的外键,如,在这个阶段,当一切都完成时,我不知道如何重构所有外键以兼容。xy_section_books_price_unit_id_foreign5.5
任何人都可以对我的问题进行一些阐述吗?
如何部署本地数据库()而不会丢失MySQL数据库,外键和es以保持数据完整?v5.7PRIMARY_KEYINDEXv5.5
回首忆惘然
海绵宝宝撒