如何检查配置文件中的MySQL / MariaDB版本是什么?

时间:2017-05-02 01:30:09

标签: php mysql laravel

我遇到的问题是,当我运行数据库迁移时,由于此行和其他一些索引,当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版本或提示不同方法的任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

由于utf8utf8mb4之间存在真正的差异(前者不能代表整个主机的可能Unicode字符),因此您需要决定是否 要求 utf8mb4与否。如果不这样做,并且您希望选择支持较旧的MySQL版本,那么只需使用utf8即可。另一方面,如果确实需要 utf8mb4以确保您的应用正常运行,那么请坚持使用utf8mb4并确保您运行的数据库支持它

答案 1 :(得分:0)

自5.5.14以来可以使用以下内容。

  1. 设置innodb_file_format=Barracuda
  2. 设置innodb_large_prefix=1
  3. 这还需要您提到的'engine' => 'innodb row_format=dynamic'您已经在使用的innodb_default_row_format=dynamic。我在这里重复它是为了完整。

    较新的mysql版本(> = 5.7.9)有一个MySqlParameter,可用于代替配置更改。