我有一个旧数据库,其中有包含以下字段的表:start_date TIMESTAMP,expiration_date DATETIME。
如果在具有不同时区的数据库上使用数据库,则会导致某些查询出现问题。因此,为避免它们,我想将start_date转换为DATETIME。如何安全地从TIMESTAMP转换为DATETIME?如果将start_date的类型从TIMESTAMP更改为DATETIME,我不会丢失任何数据吗?mysql如何将日期TIMESTAMP转换为DATETIME?
小智 10
在 MySQL 中,您可以简单地将数据类型从 更改为 ,TIMESTAMP而DATETIME不会丢失数据:
ALTER TABLE table_name MODIFY start_date DATETIME;
Run Code Online (Sandbox Code Playgroud)
这就是我要做的:
1)创建一个新datetime列
ALTER TABLE mytable ADD COLUMN mydatetime DATETIME;
Run Code Online (Sandbox Code Playgroud)
2)使用时间戳记值更新此列
UPDATE mytable SET mydatetime=FROM_UNIXTIME(UNIX_TIMESTAMP(mytimestamp));
Run Code Online (Sandbox Code Playgroud)
3)经过几次完整性检查后,删除timestamp列
ALTER TABLE mytable DROP COLUMN mytimestamp;
Run Code Online (Sandbox Code Playgroud)
这对于您来说应该足够安全,因为您可以根据需要保留原始timestamp列。
这是一个sqlfiddle示例。
Moh*_*ian -1
您可以编写查询来查找行并使用date()函数将 start_time 字段转换为DATETIME。
然后将字段类型更改为DATETIME。
接下来使用存储在变量中的新值更新字段。
例如:
<?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'] . "'")
}
Run Code Online (Sandbox Code Playgroud)