symfony 原则迁移始终生成空的up()和down()迁移,并将排序更改为“utf8mb4_unicode_ci”

jjjwad0x  于 2023-01-13  发布在  其他
关注(0)|答案(3)|浏览(143)

当我运行php bin/console doctrine:migrations:diff时,我总是得到以下新生成的迁移:

<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

final class Version20220221174647 extends AbstractMigration
{
    public function getDescription(): string
    {
        return '';
    }

    public function up(Schema $schema): void
    {
        
    }

    public function down(Schema $schema): void
    {
        // example with one table but migration generates this for all varchar column, in all tables
        $this->addSql('ALTER TABLE address CHANGE company_name company_name VARCHAR(100) DEFAULT NULL COLLATE `utf8mb4_unicode_ci`, CHANGE address_line1 address_line1 VARCHAR(100) DEFAULT NULL COLLATE `utf8mb4_unicode_ci`, CHANGE zip_code zip_code VARCHAR(10) DEFAULT NULL COLLATE `utf8mb4_unicode_ci`, CHANGE city city VARCHAR(50) DEFAULT NULL COLLATE `utf8mb4_unicode_ci`, CHANGE country country VARCHAR(50) DEFAULT NULL COLLATE `utf8mb4_unicode_ci`, CHANGE tax_identifier tax_identifier VARCHAR(255) DEFAULT NULL COLLATE `utf8mb4_unicode_ci`');
    }
}

我的SHOW CREATE TABLE address

CREATE TABLE `address` (
  `id` int NOT NULL AUTO_INCREMENT,
  `company_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `address_line1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `zip_code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `country` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `updated_at` datetime NOT NULL,
  `created_at` datetime NOT NULL,
  `tax_identifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

SHOW VARIABLES LIKE 'character\_set\_%';结果:
| 变量_名称|价值|
| - ------|- ------|
| 字符集客户端|超低频8mb4|
| 字符集连接|超低频8mb4|
| 字符集数据库|超低频8mb4|
| 字符集文件系统|二进制|
| 字符集结果|超低频8mb3|
| 字符集服务器|超低频8mb4|
| 字符集系统|超低频8mb3|
SELECT @@character_set_database, @@collation_database;结果:

@@character_set_database: utf8mb4
@@collation_database: utf8mb4_unicode_ci

我还把作战理论设定为:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'

        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci
mccptt67

mccptt671#

这是一个错误。将予以修复。作为一种解决方法,您可以使用github issue DoctrineBundle/1468中建议的解决方案

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'

        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci
            collation: utf8mb4_unicode_ci

请注意额外的collation
P.S.似乎有一个PR to address this already,所以很可能在几个月内,这个修复将不需要最新版本。但是,我确认这发生在dictrine-bundle @2.5.6

lsmd5eda

lsmd5eda2#

这肯定是一个bug。我正在使用Symfony编码一个应用程序,在版本2022. 02. 08和2022. 02. 09的迁移之间也开始发生同样的事情。
编辑:检查我的composer.json,在这两个版本之间,我把PHP从8.0更新到8.1,把Symfony从5.4.* 更新到6.0.*,我仍然相信这是Symfony上的bug ...

of1yzvn4

of1yzvn43#

我不知道现在回答你的问题是否太晚了,但也许有人会发现这个问题很有帮助。我也有同样的问题,发现在我的.env文件中,我在DATABASE_URL前面有空间。所以,我有

DATABASE_URL=""

代替

DATABASE_URL=""

相关问题