如何在脚本中处理MySQL时区

2023-12-15

我正在开发一个移动应用程序。从应用程序调用 Web 服务,该服务根据模式 (?mode=xx) 运行不同的查询

在其中一些查询中,我使用日期函数,例如 DATE(NOW())。

MySQL数据库中存储的数据存储在GMT-7(加拿大山地时间)。

我尚未为此网络服务注册域名/主机,但当我注册时,可以说它托管在不同的城市,例如多伦多(格林威治标准时间 5 - 提前 2 小时)。然后,在加拿大山区时间晚上 10:05,用户使用该应用程序发送 Web 请求调用,其中包含如下查询:

SELECT DATE(NOW()) 

由于服务器托管在多伦多,因此即使用户所在位置是前一天,并且应用程序显示基于当天的数据,也会返回明天的日期。

有人对此有什么想法吗?

Edit:

SYSTEM
2015-01-29 16:19:48
2015-01-29 23:19:48

是运行查询 select @@time_zone, now(), utc_timestamp() 的结果

这些查询处理日期 (yyyy-mm-dd) 和时间 (hh:mm:ss) 列类型。


您在 MySQL 服务器上运行了此时间诊断查询。

select @@time_zone, now(), utc_timestamp()

从你的本地时间和UTC时间可以清楚地看出,你的服务器机器的系统时区设置是“加拿大/山地”,并且MySQL服务器软件没有自己的时区设置。

如果您拿起表格并将它们原封不动地移动到某个附近时区的服务器,您可以始终更新您的软件以发出命令

set time_zone = 'Canada/Mountain';

从软件连接后即可。这将使您的新 MySQL 连接在时区方面与当前连接的行为类似。如果您拥有 MySQL 服务器,则可以根据本页上的说明设置其默认时区。http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

现在,这是关于时间数据类型的故事。DATE, TIME, and DATETIME都是时区不可知。一旦您存储了日期/时间值,即使您更改了时区设置,您也会得到相同的值。

The TIMESTAMP数据类型是时区敏感。这些数据项始终存储在UTC,也称为 Z 时间,以前称为格林威治标准时间。它们在存储时始终转换为 UTC,并在检索时始终转换回来。

The 内置函数用于获取当前日期和时间(NOW()和朋友)是时区敏感。他们将在当地时间产生值。例外情况是以下三个函数:UTC_产生 UTC 时间的值。

许多 MySQL 多时区应用程序使用以下操作规则:

  1. 询问每个用户用户偏好的时区,或者从有关用户的其他一些个人数据中找出它。 (电话已从网络提供此信息。)将其存储为区域信息友好代表用户的时区描述符(“美国/纽约”、“加拿大/山区”、“欧洲/维也纳”等)。
  2. 代表用户建立 MySQL 会话后,设置用户的时区set time_zone查询如上所示。您应该在您之后立即执行此操作connect手术。
  3. 将用户的日期和时间存储到TIMESTAMP数据类型。它们在存储时会转换为 UTC。
  4. 根据需要检索它们。他们将被转换回当地时间。

这个想法是用户的时区是她的上下文的一部分。这很有效,因为如果用户 A 在温哥华而用户 B 在哈利法克斯,并且由于某种原因用户 B 查看用户 A 的时间数据,则该数据将或多或少自动以大西洋时间显示给 B。

它的另一个好处是它可以透明地处理全球变幻莫测的夏令时到标准时间的变化。去年夏天的时间戳将以去年夏天的当地时间显示。

许多全球使用的服务器管理员将其系统服务器时间或 MySQL 默认时区设置为 UTC。 (你的没有。)

处理这一切的另一种方法是你开始的方式。选择一个时区并存储与该时区相关的时间戳。在这种情况下,最好选择不在夏令时和标准时间之间交替的时区。然后,将时间存储到数据库时,进行显式转换。您可以通过执行类似的操作来存储渥太华用户的时间。

INSERT INTO tbl (appt) VALUES ( 'whatever-time' - INTERVAL 120 MINUTE)

你会以同样的方式得到这些值。这很容易出错,但你可以让它工作。

最后,您可以自己进行转换。 如果您想知道某个任意时区与 UTC 之间有多少分钟的偏移量,请尝试这两个查询。

set time_zone = 'Canada/Atlantic';
select timestampdiff(minute, utc_timestamp(), now());

每年的这个时候返回 -240,即 -4:00。由于某些国家/地区存在半小时或刻钟时区偏移,因此您需要使用分钟而不是小时。

最后,要小心。TIMESTAMP数据类型不代表 1970 年之前的时间。而且,在我的 MariaDB 10.0 实例上,当时间超出 32 位时,它似乎在 2038-01-19T03:14:07 UTC 之后就陷入了地狱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在脚本中处理MySQL时区 的相关文章

  • 在javascript中,如何从日期字符串“yyyy-mm-dd”或时间戳中提取月份?

    我有一个数据库 其中包含某些以 json 对象形式记录的事件 每个事件都有自己的 JS 毫秒时间戳 格式为 yyyy mm dd 的日期字符串以及分钟条目 我想使用时间戳或日期字符串 以更容易的为准 作为算法的输入 该算法将计算给定月份输入
  • 如何在 MySQL 中求和时间?

    正如您在图片中看到的 我有一份停机报告 显示了所选工厂在选定日期的停机时间 现在我想添加所有的值 Time Duration 列并将其显示在附近的单独显示中 TOTAL TIME DURATION 例如 在图像中 所选日期为 2015 年
  • covertJSONtoSQL 在 NiFi 中返回空值

    我正在设计一项工作 使用以下命令将数据从 MySQL 中的数据库转移到另一个数据库 MySQL 执行SQL处理器随后将Avro转换为Json then 将Json转换为SQL then PutSQL如下流程图所示 将JSON转换为SQL返回
  • MySQL“LIKE”搜索不起作用

    我通过 LOAD DATA INFILE 在 MySQL 中导入了一个 txt 数据库 一切似乎都正常 唯一的问题是 如果我使用以下查询在数据库上搜索记录 SELECT FROM hobby WHERE name LIKE Beading
  • 从 UTC 转换为本地时区给出错误结果

    背景我需要将格式为 HH mm 的时间字符串从 UTC 转换为本地时区 例如 如果 UTC 时间为 09 00 则当地时间 斯德哥尔摩 欧洲 应提前两个小时 Problem当我将 09 00 UTC 转换为斯德哥尔摩 欧洲时间时 我得到 1
  • PHP MYSQL文件内容转义问题

    我正在尝试使用 php 将 pdf 文件上传到 mysql 数据库中 除了文件内容之外 一切都很好 无论我如何尝试转义特殊字符 查询总是失败 主要是 未知命令 n 我使用过addslashes mysql real escape strin
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主

随机推荐

  • 循环 jquery 自动完成(第二个字段)

    继这个问题jquery 自动完成 在同一字段中包含更多项目我试图循环自动完成功能 15 次 function for i 0 i lt 15 i function log message div text message prependTo
  • 将 JSON 嵌套列表转换为 DataFrame

    如何将以下字典列表 json 输出 转换为 pandas DataFrame 我试过 res for d in list of dict res update d 它给了我错误 ValueError dictionary update se
  • SelectSingleNode 在 dnx core 5.0 中给出编译错误

    我使用 SelectSingleNode 方法收到此错误 DNX Core 5 0 错误 CS1061 XmlDocument 不包含 SelectSingleNode 的定义 并且找不到接受 XmlDocument 类型的第一个参数的扩展
  • 在 powershell 中将 XML 转换为 xlsx

    我在网上找到了一些powershell命令将xlsx文件转换为xml文件 这很好用 但是我得到的 xml 会被稍微操纵 之后我需要将其转换回标准 xlsx 文件 使用以下命令生成的 xml 如何将其转换回 xlsx 文件 Thanks xl
  • OpenSSL 客户端基于证书的身份验证失败

    我正在尝试运行以下命令 root localhost certs openssl s client connect localhost 7043 cert opt openssl 1 0 0a ssl certwork client cli
  • ng-repeat 与空对象

    我收到 中继器重复 错误 我在某处读到可以通过索引进行跟踪 但是一旦我这样做 我的所有对象标题和描述值就会变得重复 我需要为每个步骤定义唯一的标题 描述和资产数组 我怎样才能做到这一点 var stepTemplate assets sco
  • Android JET 文件格式是专有的还是开放的?

    我需要以编程方式为我的 Android 项目从头开始创建 JET 文件 文件格式是否公开 鉴于所有 JET Sonivox 文件均采用 Android 源代码 包括较低级别的 C 文件 应该可以确定其格式 https android goo
  • 如何使用 pandas 重塑每第 n 行的数据?

    我需要帮助来重塑 csv 文件中的数据 该文件包含超过 10000 行 每行 10 行 例如我有这个 csv 文件 Ale Brick 1 ww 2 ee 3 qq 3 xx 5 dd 3 gg 7 hh 8 tt 9 yy 0 uu 1
  • 当我调整 Jframe 大小时如何停止 auto-repaint()

    我还在学习Java 如果有人能帮助我我会很高兴 抱歉英语不好 我是西班牙人 我正在制作一款瓷砖游戏 该游戏使用经典的 游戏循环 将引擎限制在 60fps 循环休眠然后调用repaint 这很好用 但 问题是 当 JFrame 调整大小或最大
  • 模拟连接在 Couchbase 中如何工作?

    我有一份相互依赖的文件 第一的 doctype closed auctions seller person person11304 buyer person person0 itemref item item1 price 50 03 da
  • 如何一次又一次地调用一个方法,直到它返回包含“None”的“Future”值

    给定一个返回 a 的方法Future像这样 def remove id String Future Option User Future removes and returns the user identified by id 我如何一次
  • 使用 ajax 和 JavaScript 发布到 GitHub v3 API 失败并出现 HTTP 404

    我正在尝试按照文档将 blob 发布到 JavaScript jQuery 中的 GitHub APIhttps developer github com v3 git blobs create a blob 但是我不断收到 404 请求
  • 如何通过 PHP 将 .xls 转换为 .pdf?

    我在谷歌上搜索了很多小时 但还没有找到解决方案 我需要将 xls 文件转换为 pdf 文件 怎么做 我找到了这个http www aspose com 但似乎它没有PHP API 只有 NET和JAVA 感谢您的每一个建议 PHPExcel
  • 上传apk到市场时,apk必须使用与之前版本相同的证书进行签名

    我已经创建了一个应用程序并发布在android市场上 现在我想发布它的第二个版本 我想澄清几件事 我保留了相同的包名称 我没有以前的密钥库 因为我更改了 Windows 因此删除了密钥库 并且我没有该密钥库的备份 现在我应该有什么方法可以从
  • 在 Xcode 6 中调整测量中心

    在新的 Xcode 6 中 缺少更改按钮测量中心的功能 在 Xcode 5 中 https i stack imgur com 3fCfY jpg Xcode 6 https i stack imgur com 46YTZ jpg 当我将一
  • 使用带有 LAME 的 NDK 的内置函数警告的不兼容隐式声明

    我正在尝试按照位于以下位置的教程进行操作 http developer samsung com android technical docs Porting and using LAME MP3 on Android with JNI 其要
  • 选择 2 下拉列表但允许用户输入新值?

    我想要一个包含一组值的下拉菜单 但也允许用户 选择 此处未列出的新值 我看到select2如果您使用它 则支持此功能tags模式 但是有没有办法在不使用标签的情况下做到这一点 The 很好的答案由 提供 fmpwizard适用于 Selec
  • 检测 div 中的滚动结束

    我有一个包含许多博客文章的动态网站 我想首先加载四个帖子 然后在滚动到末尾时加载另外四个帖子 我知道如何在后端处理它 但我在前端遇到问题 我已将 html 和 body 的高度设置为 100 因此窗口上的滚动事件不起作用 作为解决方法 我决
  • 使用 std::bind 时从 std::function 获取函数指针

    我正在尝试使用std function和这个结合std bind 但我遇到了一些问题 这有效 include
  • 如何在脚本中处理MySQL时区

    我正在开发一个移动应用程序 从应用程序调用 Web 服务 该服务根据模式 mode xx 运行不同的查询 在其中一些查询中 我使用日期函数 例如 DATE NOW MySQL数据库中存储的数据存储在GMT 7 加拿大山地时间 我尚未为此网络