试图找到一种通过某些融合来编程创建表的方法,但似乎无法找到正确的方法。我正在使用"学说/学说移民":" 2.1。 我在我的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: MyNameSpaceMigrations
table_name: migrations
name: Application Migrations
doctrine:database:create
工具时,它将使用Latin1 Charset和Latin1 Charset和Latin1_Swedish_Ci创建数据库。然后我运行迁移,所有表都是utf8_general_ci
$schema->createTable()
函数,但找不到通过我需要的整理的方法。这里的适当解决方法是什么?
您可以设置Default_table_options Connection选项以实现这一目标:在Symfony中,这是通过:
完成的doctrine:
dbal:
default_table_options:
charset: latin1
collate: latin1_general_ci
对于那些希望在普通学说中进行的人,这将转化为Doctrine Connection选项defaultDatabaseOptions,并将其传递给Entity Manager以及您的数据库凭据等:
[
...
'driver' => ...
'user' => ...
...
'defaultTableOptions' => [
'charset' => 'latin1',
'collate' => 'latin1_general_ci'
]
]
好吧,那很丑陋,但是我发现的唯一方法是在所有桌子毕竟生成另一组迁移,从而改变了表并将其转换为编码。迁移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");
}
创建新表时,您可以添加表选项。因此,无需使用Alter SQL进行后续迁移。
未测试是否可以在对表的更新中进行。
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
// this up() migration is auto-generated, please modify it to your needs
$table = $schema->createTable('new_table');
$table->addOption('charset', 'latin1');
$table->addOption('collate', 'latin1_general_ci');
// ....
}