#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)