diff --git a/rdbms/StmtTest.cpp b/rdbms/StmtTest.cpp
index 4aef36d0ce6160bcb4b3092a92329eff19c06c95..c48a794dbf3c1be48978f6624e266289f8b1ed23 100644
--- a/rdbms/StmtTest.cpp
+++ b/rdbms/StmtTest.cpp
@@ -231,6 +231,44 @@ TEST_P(cta_rdbms_StmtTest, insert_with_bindUint64_2_pow_64_minus_1) {
   }
 }
 
+TEST_P(cta_rdbms_StmtTest, insert_with_bindUint64_2_pow_64_minus_2) {
+  using namespace cta::rdbms;
+
+  const uint64_t insertValue = 18446744073709551614U;
+
+  // Insert a row into the test table
+  {
+    const char *const sql =
+      "INSERT INTO STMT_TEST("
+        "UINT64_COL) "
+      "VALUES("
+        ":UINT64_COL)";
+    auto stmt = m_conn.createStmt(sql);
+    stmt.bindUint64(":UINT64_COL", insertValue);
+    stmt.executeNonQuery();
+  }
+
+  // Select the row back from the table
+  {
+    const char *const sql =
+      "SELECT "
+        "UINT64_COL AS UINT64_COL "
+      "FROM "
+        "STMT_TEST";
+    auto stmt = m_conn.createStmt(sql);
+    auto rset = stmt.executeQuery();
+    ASSERT_TRUE(rset.next());
+
+    const auto selectValue = rset.columnOptionalUint64("UINT64_COL");
+
+    ASSERT_TRUE((bool)selectValue);
+
+    ASSERT_EQ(insertValue,selectValue.value());
+
+    ASSERT_FALSE(rset.next());
+  }
+}
+
 TEST_P(cta_rdbms_StmtTest, insert_with_bindString) {
   using namespace cta::rdbms;
 
diff --git a/rdbms/wrapper/MysqlStmt.cpp b/rdbms/wrapper/MysqlStmt.cpp
index 85787bcf2fa0bad7da7af6d9d636f62b3998311a..31c713947f302d15762664792cc3199e2df0ab7f 100644
--- a/rdbms/wrapper/MysqlStmt.cpp
+++ b/rdbms/wrapper/MysqlStmt.cpp
@@ -189,14 +189,14 @@ void MysqlStmt::bindOptionalUint64(const std::string &paramName, const optional<
     const unsigned int paramIdx = getParamIdx(paramName); // starts from 1.
     const unsigned int idx = paramIdx - 1;
 
-    Mysql::Placeholder_Double* holder = dynamic_cast<Mysql::Placeholder_Double*>(m_placeholder[idx]);
+    Mysql::Placeholder_Uint64* holder = dynamic_cast<Mysql::Placeholder_Uint64*>(m_placeholder[idx]);
     // if already exists, try to reuse
     if (!holder and m_placeholder[idx]) {
       throw exception::Exception(std::string(__FUNCTION__) + " can't cast from Placeholder to Placeholder_Uint64. " );
     }
 
     if (!holder) {
-      holder = new Mysql::Placeholder_Double();
+      holder = new Mysql::Placeholder_Uint64();
       holder->idx = idx;
       holder->length = sizeof(uint64_t);
     }