Cuando ejecuto php bin/console doctrine:migrations:diff siempre obtengo la siguiente migración recién generada:
<?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`'); } } Mi 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\_%'; resultado:
| Nombre de la variable | Valor |
|---|---|
| conjunto_de_caracteres_cliente | utf8mb4 |
| conexión_juego_de_caracteres | utf8mb4 |
| conjunto_de_caracteres_base_de_datos | utf8mb4 |
| sistema_de_archivos_de_juego_de_caracteres | binario |
| resultado_del_juego_de_caracteres | utf8mb3 |
| servidor_juego_de_caracteres | utf8mb4 |
| sistema_de_juego_de_caracteres | utf8mb3 |
Y SELECT @@character_set_database, @@collation_database; resultado:
@@character_set_database: utf8mb4 @@collation_database: utf8mb4_unicode_ciTambién configuré la configuración de la doctrina en:
doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' charset: utf8mb4 default_table_options: charset: utf8mb4 collate: utf8mb4_unicode_ciSeguro que es un bug. Estoy codificando una aplicación usando Symfony y empezó a pasar lo mismo entre las migraciones con las versiones 2022.02.08 y 2022.02.09.
Editar: revisando mi composer.json , entre estas dos versiones, actualicé PHP de 8.0 a 8.1 y Symfony de 5.4.* a 6.0.*. Todavía creo que es un error en Symfony...
Esto es un error. Se arreglará. Como solución alternativa, puede usar la solución propuesta en el problema de github DoctrineBundle/1468
doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' charset: utf8mb4 default_table_options: charset: utf8mb4 collate: utf8mb4_unicode_ci collation: utf8mb4_unicode_ci Observe la collation adicional
PD: parece que ya hay un PR para abordar esto , por lo que es probable que en unos meses esta solución no sea necesaria con la versión actualizada. Sin embargo, confirmo que esto sucede con la doctrina-bundle@2.5.6