如何轻松存储和检索具有属性的任意大小的c++结构((包装))在MySQL数据库?
结构的例子:
typedef struct __attribute__((packed))
{
signed char result;
unsigned char errorCode;
} Response;
typedef struct __attribute__((packed))
{
unsigned char rackId;
unsigned char subRackId;
unsigned char cardId;
unsigned char cardType;
unsigned char cardSubType;
unsigned char portId;
Response ret;
}Configure;
由于所有内容都是char,因此packed
属性没有意义,只有static_assert(sizeof(Configure) == 8);
。
可以存储为CHAR(8)。
如果你有一个不同类型的结构体,试着安排它们,这样就不会发生填充(static_assert的大小来确保)。添加手动填充比使用packed
更好。
但是如果你必须使用packed
,你应该使用一个未打包的结构来工作,并且只将数据复制到一个打包的结构中,然后写入mysql,并在从mysql读取后从打包的结构中复制出来。永远不要访问一个包装结构超过一次,在许多体系结构中访问将非常慢。