【问题标题】:Support for MySQL timestamp in the POCO C++ libraries在 POCO C++ 库中支持 MySQL 时间戳
【发布时间】:2016-09-28 15:20:27
【问题描述】:
POCO 库支持 MySQL DATE、TIME 和 DATETIME 列,但不支持 TIMESTAMP。从 TIMESTAMP 列中选择值会引发“未知字段类型”异常,因为“Poco/Data/MySQL/ResultMetadata.cpp”不支持 MYSQL_TYPE_TIMESTAMP。
在我的项目中,我必须将几列更改为 DATETIME 才能使其正常工作。这不是一个大问题,我仍然想知道这个限制的原因是什么。如果我必须使用无法更改的现有数据库模式,我将遇到严重的麻烦。
时间戳列被广泛使用,因此我不认为它们被简单地省略了。 Timestamp 列是否存在实施问题?有没有我可以使用的解决方法?未来是否计划在 POCO 中添加 MySQL 时间戳支持?
【问题讨论】:
标签:
mysql
timestamp
poco-libraries
【解决方案1】:
下载POCO库源码然后修改Data/MySQL/src/ResultMetadata.cpp文件
std::size_t fieldSize(const MYSQL_FIELD& field)
/// Convert field MySQL-type and field MySQL-length to actual field length
{
...
case MYSQL_TYPE_DATE:
case MYSQL_TYPE_TIME:
case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_TIMESTAMP: // <-- add this line
return sizeof(MYSQL_TIME);
...
}
Poco::Data::MetaColumn::ColumnDataType fieldType(const MYSQL_FIELD& field)
/// Convert field MySQL-type to Poco-type
{
...
case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_TIMESTAMP: // <-- add this line
return Poco::Data::MetaColumn::FDT_TIMESTAMP;
...
}
编译库,您将获得对 TIMESTAMP 字段的支持。