2016-05-30 90 views
3

POCO庫支持MySQL DATE,TIME和DATETIME列,但不支持TIMESTAMP。從TIMESTAMP列中選擇值會引發「未知字段類型」異常,因爲「Poco/Data/MySQL/ResultMetadata.cpp」中不支持MYSQL_TYPE_TIMESTAMP。支持POCO C++庫中的MySQL時間戳

在我的項目中,我不得不將幾列更改爲DATETIME以使其工作。這不是一個大問題,我仍然想知道這個限制的原因是什麼。如果我必須使用一個我無法改變的現有數據庫模式,我會遇到嚴重的麻煩。

時間戳列被廣泛使用,因此我不認爲它們被簡單省略。 Timestamp列是否存在實現問題?有沒有可以使用的解決方法?它計劃在未來向POCO添加MySQL時間戳支持嗎?

回答

0

下載POCO庫的源然後修改文件中的數據/ 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; 

    ... 

} 

編譯庫,你將有時間戳字段的支持。