我有一个遗留数据库,其中有包含字段的表: start_date TIMESTAMP, expiration_date DATETIME。
如果在具有不同时区的数据库上使用数据库,则会导致某些查询出现问题。 所以为了避免它们,我想将start_date转换为DATETIME。我怎样才能安全地从TIMESTAMP转换为DATETIME?如果我将start_date的类型从TIMESTAMP更改为DATETIME,我不会丢失任何数据吗? mysql如何将日期TIMESTAMP转换为DATETIME?
答案 0 :(得分:5)
我就是这样做的:
1)创建一个新的datetime
列
ALTER TABLE mytable ADD COLUMN mydatetime DATETIME;
2)使用时间戳值
更新此列UPDATE mytable SET mydatetime=FROM_UNIXTIME(UNIX_TIMESTAMP(mytimestamp));
3)经过一些完整性检查后,删除timestamp
列
ALTER TABLE mytable DROP COLUMN mytimestamp;
这对您来说应该足够安全,因为您可以根据需要保留原始timestamp
列。
以下是sqlfiddle示例。
答案 1 :(得分:0)
您可以编写查询来查找行,并使用 date()函数将start_time字段转换为 DATETIME 。
然后将字段类型更改为 DATETIME 。
下一个更新字段,其中包含存储在var。
中的新值例如:
<?PHP
//.. your codes like connection & ...
// my_table is your table name.
$query = mysql_query("SELECT * FROM my_table");
$stored = array();
$i = 0;
while($row = mysql_fetch_assoc($query))
{
$stored[++$i] = date('Y-m-d H:i:s', $row["start_date"]);
}
mysql_query("alter table my_table modify start_date DATETIME;");
$query = mysql_query("SELECT * FROM my_table");
$i = 0;
while($row = mysql_fetch_assoc($query))
{
// Id is your primary key.
mysql_query("UPDATE my_table SET start_date='" . $stored[++$i] . "' WHERE id='" . $row['id'] . "'")
}