当我跑步时:
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可能不支持它。
答案 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'),
]) : [],
],