Как вывести представление типа данных MySQL в двоичном виде?

Пробовал так:

select cast(convert('1900-01-02 00:00:01.000000', datetime(6)) AS BINARY)

Получил такое:

4957484845484945485032484858484858484946484848484848

Это просто коды символов по ASCII, но datetime(6) занимает 8 байт и мне нужно именно содержимое этих 8 байт. convert вместо cast не помог. Интересует именно datetime(6). Такой подход работал для MS SQL Server, но для MySQL почему-то поведение отличается.


Ответы (2 шт):

Автор решения: Jens

Получилось открыть .idb файл HEX-редактором и найти там нужные 8 байт.

В даблице была запись: '2020-05-05 23:18:36.123457', для которой первые 5 байт по официальной документации закодированы как 99A64B74A4. Оставшиеся три байта были найдены в HEX-представлении файла таблицы и оказались 01E241, т.е. первые 4 бита - дырка, фактически, лидирующие нули.

→ Ссылка
Автор решения: savin

Исходя из документации должно быть 5+3 байта

получается что нужно сделать так:

select 
    d as datetime
    , UNIX_TIMESTAMP(d) as timestamp
    , TRUNCATE(UNIX_TIMESTAMP(d)*1000000, 0) as ULong
    , HEX(UNIX_TIMESTAMP(d)*1000000) as `hex(ULong)`
FROM (
    SELECT '2020-05-05 23:18:36.123457' AS d UNION
    SELECT '2020-05-05 23:18:36.123458' AS d UNION
    SELECT '2015-01-15 12:01:01' AS d UNION
    SELECT '2015-01-15 12:01:01.001' AS d UNION
    SELECT '2015-01-15 12:01:01.000001' AS d
) v

'2020-05-05 23:18:36.123457' > 5A4EC5A33A141
'2020-05-05 23:18:36.123458' > 5A4EC5A33A142
→ Ссылка