Интерпретация значения поля mysql connector c в необработанных 4 байтах на дату

#c #mysql-connector

Вопрос:

В текущей базе данных я выбираю все из таблицы домашних животных, там ровно 1 запись, и в ней два поля ДАТЫ: одно для даты рождения и одно для даты смерти.

В моей записи есть значение для даты рождения и НОЛЬ для даты смерти.

Файлы заголовков

 #include <iostream>
#include <mysqlx/xdevapi.h>
 

использование директив

 using ::std::cout;
using ::std::endl;
using namespace ::mysqlx;
 

Сначала я подключаю сеанс

 Session sess("<session uri>");
 

Затем я вывожу некоторую информацию о таблице

 std::string schema_name = sess.getDefaultSchemaName();
cout << "schema_name : " << schema_name << endl;

Schema db_schema = sess.getSchema( schema_name, true );
std::string table_name { "pet" };

Table pet_table = db_schema.getTable( table_name, true );
cout << "table " << table_name << " has " << pet_table.count() << " row(s). is_view=" << std::boolalpha << pet_table.isView() << std::endl;
 

Наконец, я готовлю свой запрос

 std::stringstream  query_writer;
query_writer << "SELECT * FROM " << table_name;
std::string query_str = query_writer.str();

SqlStatement query = sess.sql(query_str);
 

Тогда получите мои результаты:

 SqlResult res = query.execute();
Row pet;
while( (pet = res.fetchOne()) ) {
    int count = res.getColumnCount();
    for( int column = 0; column < count; column   ) {
        const Columnamp; current_column = res.getColumn( column );
        const Valueamp; field_value = pet[column];
        const std::stringamp; field_name = current_column.getColumnName();
        Type field_type= current_column.getType();

        // HOW to Interpret this?
        const bytesamp; raw_bytes = field_value.getRawBytes();
    }
}
 

Мне было указано, что кодировка полей ДАТЫ описана в этой ссылке:

https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html

но ненулевое поле ДАТЫ raw_bytes имеет длину 4 байта, а не 3 байта, так где же правильная документация?

Первоначально в таблице было поле ДАТЫ, теперь оно изменено на поле ДАТЫ и ВРЕМЕНИ:

 mysql> describe pet;
 --------- ------------- ------ ----- --------- ------- 
| Field   | Type        | Null | Key | Default | Extra |
 --------- ------------- ------ ----- --------- ------- 
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | datetime    | YES  |     | NULL    |       |
| death   | datetime    | YES  |     | NULL    |       |
 --------- ------------- ------ ----- --------- ------- 
6 rows in set (0.00 sec)
 

Вот записи на вкладке:

 mysql> select * from pet;
 ---------- ------- --------- ------ --------------------- ------- 
| name     | owner | species | sex  | birth               | death |
 ---------- ------- --------- ------ --------------------- ------- 
| Puffball | Diane | hamster | f    | 1999-03-30 00:00:00 | NULL  |
 ---------- ------- --------- ------ --------------------- ------- 
1 row in set (0.00 sec)
 

Комментарии:

1. Вы уверены, какой тип даты или метки времени у вас есть? Что это describe pet; показывает? у вас есть дата, время или отметка времени?

2. У меня была ДАТА, а не ОТМЕТКА ВРЕМЕНИ или ДАТА-ВРЕМЯ. Опишите, как домашнее животное показывает дату и время (я просто изменил его на ДАТУ и время, чтобы посмотреть, повезет ли мне больше при преобразовании в time_t)