MySQL CONVERT_TZ() 问题
在数据库中处理时区时,特别是夏令时 (DST) 时,至关重要确保准确的转换。以下是有关 MySQL CONVERT_TZ() 函数的一些问题及其解决方案:
Q1。时区名称的准确性
是的,您是对的。指定时区名称(例如“美国/东部”)应自动考虑夏令时。由于 DST,CONVERT_TZ('00:00:00', 'UTC', 'US/EASTERN') 确实应该在 1 月 1 日和 7 月 1 日产生不同的结果。
第二季度。更新时区表
MySQL 使用一组时区表来确定各个时区的当前偏移量。如果您没有使用这些表的最新版本,CONVERT_TZ() 函数可能无法正常运行。您可以通过运行以下查询来检查时区表是否是最新的:
SELECT VERSION() FROM mysql.time_zone_name;
如果输出显示的版本号低于“2018h”,您应该通过执行以下命令来更新表以下命令:
mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root -p mysql
Q3。 CONVERT_TZ() 的“NULL”结果
您遇到的“NULL”结果可能表明时区表未正确安装或初始化。要验证这一点,请运行以下查询:
SELECT COUNT(*) FROM mysql.time_zone;
如果结果为 0,则意味着时区表为空。在这种情况下,您可以使用上述命令安装它们。
替代解决方案
虽然 CONVERT_TZ() 通常是时区转换的可靠解决方案,但还有一种无需时区表的替代方法。您可以存储用户与 UTC 的时区偏移量(以小时为单位),并使用以下查询将 UTC 时间转换为用户的本地时间:
SELECT UTC_TIMESTAMP() + INTERVAL user_timezone_offset_in_hours HOUR;
此方法不需要时区表,并且实现起来相对简单.
以上是如何对 MySQL 的 CONVERT_TZ() 函数进行故障排除以实现准确的时区转换?的详细内容。更多信息请关注PHP中文网其他相关文章!