【发布时间】:2020-01-17 16:16:29
【问题描述】:
其实是我的错,我之前没有想到,我的远程服务器 MySQL 版本(在共享主机上)是5.5.6,但我的本地 MySQL 版本是5.7.19。
我开发了一个 Laravel (v6.6.0) Web 应用程序,我在第一次运行时就在其中运行了迁移,但由于它完全是一个个人项目,我继续在必要的地方和方式修改数据库,(但关闭-记录,我也一直在更改迁移文件,尽管在第一次实例之后我从未运行过它们)。
我从其他一些表中迁移了所有数据,并且我的应用程序已准备好部署。但是当我导出本地数据库表并将它们导入远程数据库时,它给了我一个众所周知的错误:
指定的密钥太长;最大密钥长度为 767 字节
我实际上忽略了它,因为所有表格都很好地导入了。但最近我发现了它的警告 - 我的远程数据库中不存在所有 AUTO_INCREAMENT 和 PRIMARY_KEY。
我 searched 我能做到,但所有解决方案都建议删除数据库并使用 UTF-8 重新创建它,但实际上这不是我的情况。像下面的 PHP 方式这样的解决方案也不是我的情况,因为我在收到错误时使用 PHPMyAdmin 导入我的表:
// File: app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
我还尝试在我的目标数据库上运行以下命令:
SET @global.innodb_large_prefix = 1;
但没有运气。我还尝试替换所有出现的 .sql 本地文件:
- 从
utf8mb4到utf8,以及 - 从
utf8mb4_unicode_ci到utf8_general_ci
但又没有运气了。
具体从哪里来的错误,实际上是更长的外键,比如xy_section_books_price_unit_id_foreign,而在这个阶段,当一切都完成后,我不知道我该如何重构所有的与5.5 兼容的外键。
谁能解释一下我的问题?
如何在不丢失PRIMARY_KEYs、外键和INDEXes 到v5.5 MySQL 数据库的情况下部署我的本地数据库 (v5.7) 以保持数据完整?
【问题讨论】: