"请求未知的数据库类型json,Doctrine \ DBAL \ Platforms \ MySQL57Platform可能不支持它。"在运行php artisan migrate命令时

时间:2018-01-15 03:12:48

标签: laravel laravel-5.4

当我跑步时:

php artisan migrate

并希望将字符串字段修改为文本字段,如下所示:

//the old field that i want to modify in migration file
$table->string('description')->nullable();

//and the new text field
$table->text('description')->change();

我收到以下错误:

  

请求了未知的数据库类型json,Doctrine \ DBAL \ Platforms \ MySQL57Platform可能不支持它。

4 个答案:

答案 0 :(得分:8)

试试这个解决方案可能会对你有用,

public function __construct()
{
    DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('json', 'text');
}

如需进一步阅读此问题,请在laravel repo

中查看Issue #15772

答案 1 :(得分:1)

有相同的问题:Unknown database type json requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.

原因-作曲家安装serverVersion=5.5时,我的应用程序serverVersion=5.7文件中包含.env而不是doctrine 2.6+

好吧,DATABASE_URL将是:DATABASE_URL=mysql://root@127.0.0.1/database_%kernel.environment%?serverVersion=5.7

答案 2 :(得分:0)

如果使用Symfony,则必须确保dbal配置指向正确的服务器版本:

# Doctrine Configuration
doctrine:
  dbal:
    driver: pdo_mysql
    host: "%database_host%"
    port: "%database_port%"
    dbname: "%database_name%"
    user: "%database_user%"
    password: "%database_password%"
    charset: utf8mb4
    server_version: 5.7
    default_table_options:
      charset: utf8mb4
      collate: utf8mb4_unicode_ci
      engine: InnoDB

答案 3 :(得分:0)

解决此问题的正确方法是在MySQL部分的config / database.php上添加服务器版本。

'server_version' => "5.7"

因为如果不这样做,Doctrine将使用Doctrine \ DBAL \ Platforms \ MySqlPlatform,它支持自MySQL 5.0起不支持JSON字段的所有MySQL版本,并且通过添加server_version,Doctrine将加载支持JSON的MySQL57Platform而不是MySqlPlatform。

Laravel 7的数据库MySQL配置示例:

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'server_version' => "5.7",
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],