Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL PHP中使用设置时区有什么缺点吗_Php_Mysql_Datetime_Timezone - Fatal编程技术网

在MySQL PHP中使用设置时区有什么缺点吗

在MySQL PHP中使用设置时区有什么缺点吗,php,mysql,datetime,timezone,Php,Mysql,Datetime,Timezone,我在数据库中使用时间戳字段,我的PHP软件有自己的基于用户时区的时间管理系统。我想对某些类型的数据(创建或修改时)使用时间戳字段,并且能够对列使用teDEFAULT CURRENT\u timestamp 每次创建会话时,使用,SET time_zone='+00:00'将时区设置为UTC是否有任何缺点。我有四个独立的数据库供软件使用,目前,我正在将当前时区设置为UTC 我不想使用DATETIME,因为它们的大小更大,而且我也不能使用默认的当前时间戳,因为服务器的时区可能有偏移量 如果后端已使用

我在数据库中使用时间戳字段,我的PHP软件有自己的基于用户时区的时间管理系统。我想对某些类型的数据(创建或修改时)使用时间戳字段,并且能够对列使用te
DEFAULT CURRENT\u timestamp

每次创建会话时,使用,
SET time_zone='+00:00'
将时区设置为UTC是否有任何缺点。我有四个独立的数据库供软件使用,目前,我正在将当前时区设置为UTC


我不想使用DATETIME,因为它们的大小更大,而且我也不能使用默认的当前时间戳,因为服务器的时区可能有偏移量

如果后端已使用所有逻辑正确转换用户时区,则不应使用设置时区,因为这样会不必要地浪费资源。UTC时区应包含在DB的元数据中,DB事务将始终与之一起工作

顺便说一下,您不需要设置它,除非您的列是(我认为不是这样)

当您插入时间戳值时,MySQL会将其从 连接到UTC进行存储的时区。当您查询时间戳时 值,MySQL将UTC值转换回连接的时间 区请注意,此转换不会对其他时态进行 数据类型,如DATETIME

所以你有两个选择:

  • 在事务中设置时区,在sql中使用时间
  • 在后端使用unix时区,只在前端向用户显示正确的转换时间

我更喜欢第二个。

在处理输入日期和/或修改日期的日期/时间时,最好使用长度约为200(或适合完整日期的任何其他值)的普通
VARCHAR
,以便存储完整日期并在PHP脚本中处理日期/时间。这使您能够根据PHP代码中定义的时区灵活地查看时间。查看PHP中可用的时区

您还可以使用PHP的
date\u格式
以任何可能的格式格式化日期/时间

我在下面给出了一个参考代码

//This is the way you define your timezone in PHP code
date_default_timezone_set('Asia/Beirut');

//You can capture the date/time by using the below code. This will store "2017-05-28 23:55:34"
$date_time_registered = date('Y-m-d H:i:s');

//Retrieve the date/time and re-format it as you require. Below code will output "May", full month.
$retrieve_month_only = date_create($row['your_store_date_time']);
$retrieve_month_formatted = date_format($retrieve_month_only, 'F');

echo $retrieve_month_formatted;

您可以参考以了解PHP日期/时间格式。

是的,我读过mysql在默认情况下设置utc时区作为时间戳,但在检索时总是转换它。我的php时区设置为UTC,mysql设置为我的系统时区。我不想将UTC设置为mysql的全局时区,因为它也会影响系统中的其他db。