【问题标题】: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 字段的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2017-07-20
      相关资源
      最近更新 更多