c++ - 将mysql连接器c ++字段值的原始4字节解释为日期
问题描述
在当前数据库中,我从一个宠物表中选择所有,正好有 1 条记录,它有两个 DATE 字段,一个是出生日期,一个是死亡日期。
我的记录有一个出生日期的值和一个 NULL 的死亡日期。
头文件
#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 Column& current_column = res.getColumn( column );
const Value& field_value = pet[column];
const std::string& field_name = current_column.getColumnName();
Type field_type= current_column.getType();
// HOW to Interpret this?
const bytes& raw_bytes = field_value.getRawBytes();
}
}
有人向我指出,此链接中描述了 DATE 字段编码:
https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html
但非空 DATE 字段 raw_bytes 是 4 个字节长,而不是 3 个字节长,那么正确的文档在哪里?
最初,该表有一个 DATE 字段,现在更改为 DATETIME 字段:
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)
解决方案
推荐阅读
- c# - 如何在 Blazor WebAssemly 应用程序中引用 IHttpClientFactory?
- google-cloud-platform - 虚拟机实例消失
- angular - 角度拖放中数组的最大长度
- postgresql - 是否可以在不使用 pg_restore 的情况下在云 sql 中导入 postgresql 自定义格式转储文件?
- c# - Process.Start() 不提示应用程序选择
- floating-point - 在程序 VHDL 中将两个半精度浮点数相乘
- windows - 如何在 WINDOWS 上的 Visual Basic (vb.net) 中列出所有蓝牙设备
- python - Keras RL 未实现覆盖类方法的错误
- pandas - 将 DataFrame 传递给蜘蛛类中的 parse()
- autohotkey - 按住 Ctrl+Windows 键时如何鼠标单击拖动位置?自动热键