L'equivoco principale di MySQL con timestamp è che MySQL di default sia i rendimenti e negozi di timestamp senza una parte frazionaria.
SELECT current_timestamp() => 2018-01-18 12:05:34
che può essere convertito in secondi timestamp come
SELECT UNIX_TIMESTAMP(current_timestamp()) => 1516272429
Per aggiungere parte frazionaria:
SELECT current_timestamp(3) => 2018-01-18 12:05:58.983
che può essere convertito in microsecondi timestamp come
SELECT CAST(1000*UNIX_TIMESTAMP(current_timestamp(3)) AS UNSIGNED INTEGER) ts => 1516272274786
Ci sono pochi trucchi w con memorizzazione in tabelle. Se la tabella è stato creato come
CREATE TABLE `ts_test_table` (
`id` int(1) NOT NULL,
`not_fractional_timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
di MySQL non memorizzerà parte frazionaria al suo interno:
id, not_fractional_timestamp
1, 2018-01-18 11:35:12
Se si desidera aggiungere parte frazionaria nella vostra tabella, è necessario creare il vostro tavolo in un altro modo :
CREATE TABLE `ts_test_table2` (
`id` int(1) NOT NULL,
`some_data` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`fractional_timestamp` timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
che porta al risultato requiered:
id, some_data, fractional_timestamp
1, 8, 2018-01-18 11:45:40.811
La funzione current_timestamp() è in grado di ricevere valore fino a 6, ma ho scoperto (almeno nella mia versione installata di MySQL 5.7.11) che la precisione di frazione 6 porta allo stesso valore costante di 3 cifre alla coda , nel mio caso 688
id, some_data, fractional_timestamp
1, 2, 2018-01-18 12:01:54.167688
2, 4, 2018-01-18 12:01:58.893688
Ciò significa che la precisione reale utilizzabile in MySQL è 3.
FROM_UNIXTIME (UNIX_TIMESTAMP (CONCAT (DATE (NOW()), '', CURTIME (3))), creerà un timestamp con millisecondi Regola il parametro in tempo reale per modificare il numero di decimali – user1119648
@ user1119648 - Which DB? Nessun DB con 'CURTIME (3)' supporta anche 'NOW (3)'? Quindi 'CONCAT (DATE (NOW()), '', CURTIME (3))' potrebbe essere solo 'NOW (3)), almeno in MySQL 5.6.4+ Inoltre, 'FROM_UNIXTIME' e' UNIX_TIMESTAMP' sono inversi l'uno dall'altro, quindi 'FROM_UNIXTIME (UNIX_TIMESTAMP (qualunque))' risulta in 'qualunque'. La tua lunga espressione non è la stessa come 'NOW (3)'? – ToolmakerSteve