【问题标题】:How to make Symfony2 set the MySQL time_zone?如何让 Symfony2 设置 MySQL 时区?
【发布时间】:2013-05-20 15:48:17
【问题描述】:

如何在 Symfony2 中设置自定义驱动程序选项?

在这种情况下,我想在 MySQL 中运行 SET time_zone = '-04:30' 作为连接初始化的一部分。

【问题讨论】:

    标签: php mysql symfony doctrine-orm timezone


    【解决方案1】:

    Symfony 1.4 不同,在 Symfony2 中没有 default_timezone 配置参数来设置默认时区。我不确定这是什么原因,但如果您喜欢在应用程序中保留尽可能多的配置,请使用下面的代码。 通过覆盖 AppKernel#init() 函数来设置默认时区(和任何类似的 PHP 配置)。记得打电话给它的父母。

    <?php
    // AppKernel.php
    
    class AppKernel extends Kernel
    {
        //..
        //.......
        //...........
        // --- Append the init function below ---
    
        public function init()
        {
            date_default_timezone_set( 'Asia/Kolkata' );
            parent::init();
        }
    }
    

    或者你可以编辑php.ini

    datetime = 'Asia/Kolkata'
    

    注意: init 方法自 2.3 版起为 deprecated,将在 3.0 版中删除。您必须在构造函数中移动您的逻辑:

    public function __construct($environment, $debug)
    {
        date_default_timezone_set('Asia/Kolkata');
        parent::__construct($environment, $debug);
    }
    

    【讨论】:

    • Deonia,这在symfony2 中不起作用,至少我找不到任何关于它的文档。
    • @Cesar 之前我错误地给了你 v1.4 的方法。试试上面编辑的答案
    • 我希望我的问题的标题足够清楚,我需要它来设置mysql服务器的时区,而不是php的时区,无论如何我写的答案是正确的,我回答了我自己的问题,因为stackoverflow促进回答自己的问题,无论如何你的回答也对我有帮助,因为现在我知道如何在symfony2中设置php时区,所以两个时区是同步的。谢谢!
    【解决方案2】:

    app/config/config.yml中设置如下:

    doctrine:
        dbal:
            driver:   %database_driver%
            host:     %database_host%
            port:     %database_port%
            dbname:   %database_name%
            user:     %database_user%
            password: %database_password%
            charset:  UTF8
            # Here we configure the custom driver options
            # In this case is PDO::MYSQL_ATTR_INIT_COMMAND
            # The constant can not be used in this context
            options: {1002: "SET time_zone = '-04:30'"}
    

    【讨论】:

    • 首先,如果可能的话,尝试使用 UTC 来存储日期/时间(换句话说,你不需要这个)。但是如果需要(即遗留系统),在将时区加载到 MySQL 的表后(请参阅dev.mysql.com/doc/refman/5.7/en/mysql-tzinfo-to-sql.html),您可以使用命名时区,例如“America/Edmonton”而不是偏移量。这意味着您不必针对夏令时或其他时间更改进行调整(只要 MySQL 的时区数据正确)。
    猜你喜欢
    • 2012-01-16
    • 2012-09-21
    • 2011-12-05
    • 1970-01-01
    • 2014-12-03
    • 2013-06-29
    • 1970-01-01
    • 2017-12-09
    • 2013-09-22
    相关资源
    最近更新 更多