Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
laravel 5.4指定的键太长,为什么数字是191_Laravel - Fatal编程技术网

laravel 5.4指定的键太长,为什么数字是191

laravel 5.4指定的键太长,为什么数字是191,laravel,Laravel,我知道这个问题已被讨论、解决或解决。 但我想问的是,为什么数字是191 Schema::defaultStringLength(191); 我试过:如果192,错了。191,好的。 在此之后,我还编辑了database\migrations\xxx\u user\u table.php 改变这个 $table->string('name'); 将来 然后运行php artisan迁移,就可以了。 使用一些mysql工具查看用户表的模式, 名称的长度实际上是255,其他列是191 我看到

我知道这个问题已被讨论、解决或解决。
但我想问的是,为什么数字是191

Schema::defaultStringLength(191);
我试过:如果192,错了。191,好的。 在此之后,我还编辑了database\migrations\xxx\u user\u table.php
改变这个

$table->string('name');
将来

然后运行php artisan迁移,就可以了。 使用一些mysql工具查看用户表的模式, 名称的长度实际上是255,其他列是191

我看到了这些文章
@
@
@
@

这是: @

InnoDB表的索引键前缀长度限制为767字节 使用冗余或压缩行格式。例如,您可能会 此限制在列上的列前缀索引超过255个字符 TEXT或VARCHAR列,假定为utf8mb3字符集和 每个字符最多3个字节

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
但是为什么名称的长度255是可以的呢?
192*3=576,小于767,为什么192不正常?

为什么限制为191个字符? 关键是Laravel5.4,因此数据库假设每个字符最多有4个字节

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
如果针对utf8mb4进行了更新,那么您所引用的示例将完美匹配强调在编辑位置添加

对于使用冗余或紧凑行格式的InnoDB表,索引键前缀长度限制为767字节。例如,假设utf8mb4字符集且每个字符的最大字节数为4,则文本或VARCHAR列上的列前缀索引可能超过191个字符,从而达到此限制

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
  • 191*4=764
    (作品)
  • 192*4=768
    (太大)
utf8mb4
引入了对
补充字符的支持,这些字符不属于
utf8
,其中包括表情符号。要进一步了解是否需要
utf8mb4
,可以从开始

我该如何解决这个问题? 如果需要保持较大的字段大小,最快的修复方法是将默认值改为
utf8

或者,你也可以。看起来是这样的:

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

    $table->increments('id');
    $table->string('myString')->unique();
});
如果我需要
utf8mb4
和长索引键怎么办?
这应该是一个很好的起点。它讨论了设置
innodb\u large\u prefix
以允许更长的键长度。

5个变通方法,从MySQL的角度来看:只是一个澄清-utf8对于使用1-4字节表示Unicode世界中的任何字符都很好。问题是mysql的utf8实现使用了1-3个字节,这意味着无法表示非常大的块(在基本的前65K代码点之外)。