当我运行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
3条答案
按热度按时间mccptt671#
这是一个错误。将予以修复。作为一种解决方法,您可以使用github issue DoctrineBundle/1468中建议的解决方案
请注意额外的
collation
P.S.似乎有一个PR to address this already,所以很可能在几个月内,这个修复将不需要最新版本。但是,我确认这发生在dictrine-bundle @2.5.6
lsmd5eda2#
这肯定是一个bug。我正在使用Symfony编码一个应用程序,在版本2022. 02. 08和2022. 02. 09的迁移之间也开始发生同样的事情。
编辑:检查我的
composer.json
,在这两个版本之间,我把PHP从8.0更新到8.1,把Symfony从5.4.* 更新到6.0.*,我仍然相信这是Symfony上的bug ...of1yzvn43#
我不知道现在回答你的问题是否太晚了,但也许有人会发现这个问题很有帮助。我也有同样的问题,发现在我的.env文件中,我在
DATABASE_URL
前面有空间。所以,我有代替