我知道这个问题已经被讨论、解决或解决了

Schema::defaultStringLength(191);

I tried: if 192, wrong. 191, ok. After this, I also edit database\migrations\xxx_user_table.php
Change this

$table->string('name');

成为

$table->string('name', 255);

然后运行php artisan迁移,就可以了.

我看到了这些文章

还有这个: @https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html

对于符合以下条件的InnoDB表,索引键前缀长度限制为767字节 使用冗余或紧凑行格式.例如,您可能会点击 上的列前缀索引超过255个字符时的此限制 TEXT或VARCHAR列,假定为utf8mb3字符集和 每个字符最多3个字节.

但为什么名字的长度255是可以的呢

推荐答案

Why is it limited to 191 characters?

The key is that Laravel 5.4 defaults to utf8mb4 so the database assumes a maximum of 4 bytes for each character.

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

如果对utf8mb4进行了更新,那么您所引用的示例将完美匹配.Emphasis在编辑处添加.

The index key prefix length limit is 767 bytes for InnoDB tables that use the REDUNDANT or COMPACT row format. For example, you might hit this limit with a column prefix index of more than 191 characters on a TEXT or VARCHAR column, assuming a utf8mb4 character set and the maximum of 4 bytes for each character.

  • 191 * 4 = 764(作品)
  • 192 * 4 = 768 (too large)

utf8mb4引入了对Supplementary Characters的支持,这不是utf8的一部分,其中包括表情符号.为了进一步了解你是否需要utf8mb4,你可以从this StackOverflow answer on the question开始.

How do I fix this?

如果需要保持较大的字段大小,最快的修复方法是将默认值改为utf8.Laravel 5.3 and below defaulted utf8, and that would be safe to use in most cases.

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',

Alternatively, you can set the charset and collation on specific tables in the DB Migration when creating that table. That would look something like this:

Schema::create('monitors', function (Blueprint $table) {
    $table->charset = 'utf8';
    $table->collation = 'utf8_unicode_ci';

    $table->increments('id');
    $table->string('myString')->unique();
});

What If I need utf8mb4 and long index keys?

This StackOverflow answer应该是一个很好的起点.它讨论了设置innodb_large_prefix以允许更长的密钥长度.

Laravel相关问答推荐

laravel错误更新使用外键的数据库

当未通过验证的字段是值数组时,Laravel$validator->;validator()方法不会引发异常

在 React 中将属性从一个组件传递到另一个组件

Laravel Horizo​​n 限制与优化

Laravel 获取具有多对多关系的中间表数据

如何自定义密码确认不匹配.错误信息?

自从 Laravel 使用 Vite 更新后,我无法运行npm run dev

你如何找到 Laravel 外观背后的底层类?

调用未定义的函数 App\Http\Controllers\ [函数名]

Laravel - 如何恢复本地存储符号链接并刷新

Laravel:如何在没有数据库的情况下对用户进行身份验证

错误:您的要求无法解析为一组可安装的软件包.

如何在 Laravel 中实现自己的 Faker 提供程序

如何在 Laravel 5 中验证当前、新密码和新密码确认?

如何使用外部图像生成 html div 的 screenshot截图?

在 Laravel 容器中覆盖单例

加载模型的所有关系

Laravel/Lumen 中两列之间的 SQL

在哪里放置 Blade::extend

Laravel 5 Illuminate\Http\Request 的方法不允许静态调用