2016-05-30 4 views
3

POCOライブラリは、MySQL DATE、TIMEおよびDATETIMEカラムをサポートしますが、TIMESTAMPはサポートしません。 「Poco/Data/MySQL/ResultMetadata.cpp」ではMYSQL_TYPE_TIMESTAMPがサポートされていないため、TIMESTAMP列から値を選択すると「未知のフィールド型」の例外が発生します。POCO C++ライブラリのMySQLタイムスタンプのサポート

私のプロジェクトでは、いくつかの列をDATETIMEに変更して機能させる必要がありました。これは大きな問題ではありませんでしたが、この制限の理由は何か不思議です。私が変更できない既存のデータベーススキーマを使用しなければならない場合、私は重大な問題に陥るでしょう。

タイムスタンプの列が広く使用されているため、単に省略されたとは思われません。タイムスタンプ列に関する実装上の問題はありますか?私が使用できる回避策はありますか?将来、POCOにMySQLのタイムスタンプサポートを追加する予定ですか?

答えて

0

のMySQL/SRC/ResultMetadata.cpp

/ファイルのデータを変更し、その後POCOライブラリのソースをダウンロード
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フィールドをサポートしています。

関連する問題