我在我的数据库中使用时间戳字段,我的PHP软件有自己的基于用户时区的时间管理系统。我想对某些类型的数据使用时间戳字段(在何时创建或修改),并且还能够使用te DEFAULT CURRENT_TIMESTAMP
作为列。
每次创建会话时,使用SET time_zone = '+00:00'
将时区设置为UTC是否有任何不足之处。我有四个独立的数据库,软件使用,目前,我将当前时区设置为UTC。
我不想使用DATETIME,因为它们的尺寸更大,而且我也无法使用DEFAULT CURRENT_TIMESTAMP
,因为服务器的时区可能有偏移量。
答案 0 :(得分:0)
如果您的后端已经使用所有逻辑正确转换用户的时区,则不应使用SET time_zone,因为您不必要地浪费资源。 UTC时区应该是数据库的元数据,数据库事务总是可以使用它们。
顺便说一下TIMESTAMP columns always will be stored in UTC,所以你不需要设置它,除非你的列是datetime(我认为不是这样)。
当您插入TIMESTAMP值时,MySQL会将其转换为您的 连接的时区为UTC以进行存储。当您查询TIMESTAMP时 值,MySQL将UTC值转换回连接的时间 区。请注意,其他时间不会发生此转换 数据类型,如DATETIME。
所以你有两个选择:
我更喜欢第二个。
答案 1 :(得分:0)
在处理输入日期和/或修改日期的日期/时间时,最好使用长度约为200的普通VARCHAR
(或任何其他适合完整日期的值)以便存储完整的日期和处理PHP脚本中的日期/时间。这使您可以根据PHP代码中定义的时区灵活地查看时间。 Click here在PHP中查看可用的时区。
您也可以使用PHP的date_format
以任何可能的格式格式化日期/时间。
我在下面给出了参考代码。
//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;
您可以参考this link了解PHP日期/时间格式。