簡體   English   中英

如何從 doctrine / symfony 中設置 MysQL 變量 (time_zone)?

[英]How do I set a MysQL variable (time_zone) from within doctrine / symfony?

我想知道如何從 Symfony/Doctrine 中將 MySQL 時區設置為 UTC( SET time_zone = 'UTC' ),所以當我在查詢中的DATETIME字段上調用UNIX_TIMESTAMP() function 時,它返回 UTC unix 時間而不是服務器時區中的 unix 時間。

我該如何做到這一點,無論是在每次連接時自動執行,還是在時區有所不同的這些類型的查詢之前手動執行?

順便說一句,我需要在 MySQL 查詢而不是應用程序中進行此轉換,因此我可以GROUP BY需要紀元時間的間隔進行分組。

您可以通過在ProjectConfiguration`中調用的configureDoctrineConnection回調來執行此操作:

public function configureDoctrineConnection(Doctrine_Connection $connection)
{
  $connection->exec('SET time_zone = "UTC"');
}

如果您使用多個連接,則可能存在問題。

(答案經過修改,刪除了有缺陷的其他方法。)

我將嘗試編輯projectConfiguration,並添加類似(未經測試和未經驗證)的內容:

    $databaseManager = new sfDatabaseManager($this->configuration);
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
    $diff = $connection->execute("SET time_zone = 'UTC'");

注意, $options$this->configuration僅在任務中可用,因此也許應該對其進行硬編碼(我相信默認值為'doctrine' )。

如果要在Symfony應用程序級別執行此操作,則可以將其添加到config/settings.yml

all:
  .settings:
    default_culture: en_US
    default_timezone: Asia/Kolkata

很抱歉,答案不是在MySQL上,而是在Oracle DB上 我在Oracle DB上搜索了很長時間的數據,但一無所獲。 這是唯一也討論該問題的主題,但僅限於MySQL。

也許有人會為Oracle DB提供幫助:

在文件config/services.yaml

對於Symofony 4:

services:
    Doctrine\DBAL\Event\Listeners\OracleSessionInit:
        arguments:
            - TIME_ZONE: 'UTC'
        tags:
            - { name: doctrine.event_listener, event: postConnect }

對於Symfony 2和3:

services:
    oci8.listener:
        class: Doctrine\DBAL\Event\Listeners\OracleSessionInit
        arguments:
            - TIME_ZONE: 'UTC'
        tags:
            - { name: doctrine.event_listener, event: postConnect }

或者,您可以將arguments對象寫入yaml中,如下所示:

arguments: { TIME_ZONE: 'UTC' }

對於 MySQL 8 和 Symfony 5,您可以將以下內容添加到config/services.yaml

services:
    Doctrine\DBAL\Event\Listeners\SQLSessionInit:
        arguments:
            - 'SET TIME_ZONE="+04:00"'
        tags:
            - { name: doctrine.event_listener, event: postConnect }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM