更改MySQL中的连接时区

更改MySQL中的连接时区,mysql,timezone,Mysql,Timezone,我的服务器正在MDT 所以我用下面的一个来转换EST SET time_zone = '-5:00' 但是,我怎样才能切换到EDT,因为 While `EST` is only valid in winter, while in summer how to change it to `EDT` 我只是尝试使用命名时区。但我有以下错误 #1298 - Unknown or incorrect time zone: 'America/Toronto' 我不明白如何解决这个问题 我怎样才能转

我的服务器正在
MDT

所以我用下面的一个来转换
EST

SET  time_zone = '-5:00'
但是,我怎样才能切换到EDT,因为

While `EST` is only valid in winter, while in summer how to change it to `EDT`
我只是尝试使用命名时区。但我有以下错误

 #1298 - Unknown or incorrect time zone: 'America/Toronto'
我不明白如何解决这个问题

我怎样才能转换

UTC-05至UTC-04


您是否尝试过使用zoneinfo名称,例如“America/New_York”,而不是缩写(仅在一半时间内有效)


理想情况下,您不应该在所有课程中都使用服务器时区-以UTC存储日期,然后在客户端代码中将其转换为适当的时区。(请注意,这取决于您存储的内容。由具有时区的用户指定的未来日期/时间值应以这种方式存储,而不是转换为任何其他时区,以防规则在现在和未来日期/时间之间发生更改。但对于计算机记录的时间瞬间,例如用于日志记录、事务处理等,我肯定会存储UTC。我决不会建议存储“仅本地时间,并假设服务器和客户端具有相同的规则”。

因为您使用的是Windows,所以您必须将时区描述表导入MySQL服务器


对于Linux、BSD和Mac OS X,如果需要加载时区表,请执行以下操作:

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot mysql

对于在Windows上使用WampServer的我来说

  • 从下载POSIX版本
  • 解开它
  • 将所有文件放入wamp mysql数据中:C:\wamp\bin\mysql\mysql5.7.11\data\mysql
  • 重新启动wamp
更多信息:

要为MyISAM时区表使用包含.frm、.MYD和.MYI文件的时区包,请下载并解压缩它。这些表文件是mysql数据库的一部分,因此您应该将这些文件放在mysql服务器数据目录的mysql子目录中。在执行此操作之前,请停止服务器,然后重新启动它


为了完整起见,Mac用户可以在
/usr/local/mysql/bin
目录中找到
mysql\u tzinfo\u to\u sql
实用程序。

因此,完整的命令将是
/usr/local/mysql/bin/mysql_tzinfo_to_sql/usr/share/zoneinfo |/mysql-p-u root mysql


我花了几个小时来寻找实用程序,上面的路径可能会拯救你的

如果Mysql8

  • 转到/etc/my.cnf
  • 将此添加到[mysqld]下 默认时区=“美国/纽约”
  • systemctl重新启动mysqld
  • 如果您遇到如下问题:

    Fatal error: Illegal or unknown default time zone
    
    然后执行以下步骤:

  • 首先从/etc/my.cnf文件中删除默认时区='America/New_York'

  • 转到shell(退出mysql)并运行命令

    $ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
    
  • 再添加一行

  • 重新启动mysql


  • 我尝试设置时区='America/NewYork',但它不起作用,我生成错误#1298-未知或不正确的时区:'America/NewYork'@gowri:在不知道如何将数据插入数据库(例如,哪种语言/平台)的情况下,很难知道如何在UTC中存储数据。至于有效时区——我认为这取决于操作系统;你用的是哪种操作系统?我用的是php,oc是windows xp,服务器wamp@gowri:如果您能找到纽约的Windows时区ID,您可能会发现它有效。我不是马上就知道的。至于UTC。。。您正在尝试插入当前时间吗?如果是,请使用UTCTIMESTAMP()。或者,只需将时区设置为“UTC”就可以满足您的需要…@MartinZvarík:不,如果您存储的是本地时间,那么确实是这样。假设你在伦敦,在当地时间记录这两项交易:“2019-10-27T01:45:00”和“2019-10-27T01:15:00”。那些时间你怎么点?毫无疑问,你不能这样做,因为由于DST转换,2019年10月27日伦敦的凌晨1点到凌晨2点之间的时间发生了两次。出于完全相同的原因,您也无法明确地将其转换为另一个时区。这只是时区复杂的一个方面。还有很多,其中大部分是我在创作NodaTime时学到的……这也是我为解决这个问题所做的。下面的页面描述了这个过程:我认为你应该在
    -uroot
    之后添加
    -p
    选项,以便使用根密码。这不仅限于Windows,在Ubuntu上,我还必须加载时区表,如这里所述。我的env(OS X,Mysql 5.6.13)给了我一个模糊的错误“错误1406(22001)第38916行:第1行“缩写”列的数据太长。我通过运行
    mysql\u tzinfo\u to_sql/usr/share/zoneinfo | sed的/Local时区必须设置——请参阅zic手册页/(错误)/“| mysql-uroot mysql
    (另请参阅)这对我很有效。在Ubuntu上,my.cnf位于
    /etc/mysql/my.cnf
    ,使用
    sudo服务mysql restart重新启动
    ,使用
    选择@@global.time\u zone确认