Временная метка UNIX для MySQL DATETIME

У меня есть таблица со статистикой и поле с именем time с отметками времени Unix.

В таблице около 200 строк, но я хотел бы изменить временные метки Unix на MySQL DATETIME, не теряя текущие строки. Текущая таблица:

CREATE TABLE `stats` (
    `id` int(11) unsigned NOT NULL auto_increment,
    `time` int(11) NOT NULL,
    `domain` varchar(40) NOT NULL,
    `ip` varchar(20) NOT NULL,
    `user_agent` varchar(255) NOT NULL,
    `domain_id` int(11) NOT NULL,
    PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Итак, time (INT) должно быть поле DATETIME.

Как обновить временную метку Unix до MySQL DATETIME?

Ответы

Ответ 1

Не забудьте протестировать его, прежде чем использовать его для реального, это записано из памяти, но должно дать вам хорошую идею.

ALTER TABLE `stats` CHANGE `time` `unix_time` int(11) NOT NULL // rename the old column
ALTER TABLE `stats` ADD `time` DATETIME NOT NULL // create the datetime column
UPDATE `stats` SET `time`=FROM_UNIXTIME(unix_time) // convert the data
ALTER TABLE `stats` DROP `unix_time` // drop the old unix time column

Ответ 2

  • используйте таблицу alter для создания нового столбца (например, time2) с типом datetime в той же таблице
  • статистика обновления устанавливается время2 = from_unixtime (время);
  • используйте таблицу alter для a) удалите столбец времени и b) переименуйте time2 во время.

Ответ 3

ALTER TABLE `stats`
MODIFY COLUMN `time` timestamp NULL DEFAULT '0000-00-00 00:00:00' AFTER `id`;
ALTER TABLE `stats`
MODIFY COLUMN `time` datetime NULL DEFAULT '0000-00-00 00:00:00' AFTER `id`;

Ответ 4

Вот пример PDO, как использовать FROM_UNIXTIME в подготовленном выражении:

$query = "INSERT INTO " .$this->table_name.  " SET origTS=FROM_UNIXTIME(:d2)";                
$stmt = $this->conn->prepare($query);
$stmt->bindParam(":d2", $this->origTS);         // UNIX time [ but seconds! ]