【问题标题】:How to check what the MySQL/MariaDB version is inside a config file?如何检查配置文件中的 MySQL/MariaDB 版本?
【发布时间】:2017-05-02 13:58:41
【问题描述】:

我遇到的问题是,当我运行数据库迁移时,由于这一行和其他一些索引,当字符集为 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 版本的帮助或对不同方法的提示将不胜感激。

【问题讨论】:

  • 这与mysql版本无关,这个问题与mysql的innodb实现中选择的字符集和限制有关。

标签: php mysql laravel


【解决方案1】:

以下内容自 5.5.14 起可用。

  1. 设置innodb_file_format=Barracuda
  2. 设置innodb_large_prefix=1

这还需要您提到您已经在使用的'engine' => 'innodb row_format=dynamic'。为了完整起见,我在这里重复一遍。

较新的 mysql 版本 (>=5.7.9) 有一个 innodb_default_row_format=dynamic 可以用来代替配置更改。

【讨论】:

    【解决方案2】:

    由于utf8utf8mb4 之间存在真正的区别(前者不能代表所有可能的Unicode 字符),您需要决定是否需要强> utf8mb4 与否。如果您不这样做,并且您希望选择支持较旧的 MySQL 版本,那么只需选择使用utf8。另一方面,如果您确实需要utf8mb4 来保证您的应用程序的正确运行,那么请坚持使用utf8mb4 并确保您运行的数据库支持它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多