学说迁移表整理

Vit*_*Kos 3 php doctrine symfony doctrine-orm

试图找到一种以编程方式创建具有某些排序规则的表的方法,但似乎无法找到如何正确执行此操作的方法。我正在使用 “doctrine/doctrine-migrations-bundle”:“2.1.*@dev”和Symfony 2.3,

我在 config.yml 中设置:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  LATIN1
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"

        entity_managers:
                    default:
                        auto_mapping: true

doctrine_migrations:
    dir_name: %kernel.root_dir%/../src/CF/EscritorioBundle/Migrations
    namespace: MyNameSpace\Migrations
    table_name: migrations
    name: Application Migrations
Run Code Online (Sandbox Code Playgroud)

当我运行doctrine:database:create工具时,它使用 LATIN1 字符集和 latin1_swedish_ci 作为默认排序规则创建数据库。然后我运行我的迁移,所有的表都是utf8_general_ci

$schema->createTable()查看该函数,但找不到传递我需要的排序规则的方法。这里的正确解决方法是什么?

Vit*_*Kos 5

嗯,这有点难看,但我发现的唯一方法是在所有表之后生成另一组迁移,这些迁移改变了表并转换了编码。迁移up()down()功能如下所示:

......    
    /**
     * @param Schema $schema
     */
    public function up(Schema $schema)
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->addSql("ALTER TABLE MyTable CONVERT TO CHARACTER SET LATIN1 COLLATE latin1_general_ci");
    }

    /**
     * @param Schema $schema
     */
    public function down(Schema $schema)
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->addSql("ALTER TABLE MyTable CONVERT TO CHARACTER SET UTF8 COLLATE utf8_general_ci");
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以设置 default_table_options 连接选项来实现此目的:在 symfony 中,这是通过以下方式完成的:

doctrine:
    dbal:
        default_table_options:
            charset: latin1
            collate: latin1_general_ci
Run Code Online (Sandbox Code Playgroud)

对于那些希望以简单的原则进行操作的人,这将转换为原则连接选项 defaultDatabaseOptions,并与您的数据库凭据等一起传递给实体管理器:

[
    ...
    'driver' => ...
    'user' => ...
    ...
    'defaultTableOptions' => [
         'charset' => 'latin1',
         'collate' => 'latin1_general_ci'
    ]
]
Run Code Online (Sandbox Code Playgroud)