我遇到的问题是,当我运行数据库迁移时,由于此行和其他一些索引,当charset为utf8mb4
时出现错误:
$table->string('taggable_type', 255)->index();
所以,我想如果我可以通过检查使用哪个MySQL版本来修改config / database.php中用于utf8的字符集,那么问题就可以解决/解决了。
我正在考虑做一个原始查询,如:
\Illuminate\Support\Facades\DB::raw('SHOW VARIABLES LIKE "%version%"');
在config/database.php
内。现在我收到的错误是
A facade root has not been set.
我该如何解决这个问题?
是的,我尝试在我的AppServiceProvider的启动方法中设置Schema::defaultStringLength(191);
,我也尝试了'engine' => 'InnoDB ROW_FORMAT=DYNAMIC'
,但我仍然收到指定的密钥太长,我认为可能是由于MySQL 5.5我相信。
有关如何检查配置文件中的MySQL版本或提示不同方法的任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
由于utf8
和utf8mb4
之间存在真正的差异(前者不能代表整个主机的可能Unicode字符),因此您需要决定是否 要求 utf8mb4
与否。如果不这样做,并且您希望选择支持较旧的MySQL版本,那么只需使用utf8
即可。另一方面,如果确实需要 utf8mb4
以确保您的应用正常运行,那么请坚持使用utf8mb4
并确保您运行的数据库支持它
答案 1 :(得分:0)
自5.5.14以来可以使用以下内容。
innodb_file_format=Barracuda
innodb_large_prefix=1
这还需要您提到的'engine' => 'innodb row_format=dynamic'
您已经在使用的innodb_default_row_format=dynamic
。我在这里重复它是为了完整。
较新的mysql版本(> = 5.7.9)有一个MySqlParameter
,可用于代替配置更改。