【问题标题】:Laravel's Eloquent: bypass the 191 characters VARCHAR limitationLaravel 的 Eloquent:绕过 191 个字符的 VARCHAR 限制
【发布时间】:2018-10-14 18:04:27
【问题描述】:

this personthis personthis person所示,为了避免出现

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

你必须像这样修改你的 Laravel 项目的AppServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;              //add this

class AppServiceProvider extends ServiceProvider {
    public function boot() {
        Schema::defaultStringLength(191);           //and this
    }

    public function register() { }
}

但是这种方法的缺点是我使用的 VARCHAR 被限制为 191 个字符,并且我希望有一个比这更长的字段。我该怎么办?

感谢您的帮助。

【问题讨论】:

  • 你链接到的问题有几个关于如何配置你的mysql服务器来支持这个东西的答案(索引超过191个字符)。这些有什么问题?
  • 因为我会将我的项目部署到我客户的机器上,我不知道会支持哪个 MySQL 版本。此外,我不知道在迁移中设置 VARCHAR 的长度可以绕过 255 个字符的限制。
  • 在迁移中设置 varchar 的长度并没有摆脱限制。限制来自尝试在表上创建索引并且索引变得比支持的长。如果您从未在 varchar 字段上创建索引,则不会有任何限制。然而,Laravel 在默认迁移中的 users.email 字段上创建了一个索引,因此人们在他们的新项目中看到了这个限制。我认为您应该将 mysql 配置记录为应用程序要求,并让他们的技术团队为您解决。

标签: laravel eloquent varchar


【解决方案1】:

实际上,您可以在迁移文件中定义大小。示例

$table->string('field_name', 200);

【讨论】:

  • 我能走多远?如果限制是 250,我认为这也不够。
  • 255 是最大值,但解决这个问题的唯一真正方法是升级你的 mysql 版本。
  • 如果您想要更长的尺寸,请改用text 类型。 Varchar 限制为最大 255 个字符长度
  • 显然它工作得很好。我创建了一个超过 1000 个字符的字段。
  • 啊。有解释stackoverflow.com/questions/13506832/…,我们可以设置最大大小65,535
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2011-05-03
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2012-04-16
相关资源
最近更新 更多