在 Symfony 中减少 acl class 的 varchar 长度

Decrease varchar length for acl class in Symfony

我有一个 symfony 项目(2.8 版),运行 包含以下包:

此网站链接到 mySQL 数据库(5.6 版)。

当我想使用以下命令更新我的数据库方案时,我遇到了原则问题:

php app/console doctrine:schema:update --force

因为 innoDB 引擎和我的数据库不支持 varchar(255) 类型,所以我将所有 varchar 的长度减少到 191,现在它可以工作了。

我现在的问题是 doctrine 想要生成我无法控制的表(显然与 acl 链接),如下所示:

CREATE TABLE acl_classes (id INT UNSIGNED AUTO_INCREMENT NOT NULL, class_type VARCHAR(200) NOT NULL, UNIQUE INDEX UNIQ_69DD750638A36066 (class_type), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;

如何减少 class_type 的长度来应用 varchar(191) ?

提前致谢。

您可以在 /vendor/symfony/security-acl/Dbal/Schema.php 第 70 行 https://github.com/symfony/security-acl/blob/master/Dbal/Schema.php#L70

中修复
$table->addColumn('class_type', 'string', array('length' => 200));

改为

$table->addColumn('class_type', 'string', array('length' => 190));

或者你可以试试utf8mb4编码:

doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci