We use DBD::MaxDB with the following UNCODE patch. We our needs it works fine.



diff -uNr DBD-MaxDB-7.5.00.32.origin/dbdimp.c DBD-MaxDB-7.5.00.32/dbdimp.c
--- DBD-MaxDB-7.5.00.32.origin/dbdimp.c 2005-07-21 17:01:31.000000000 +0900
+++ DBD-MaxDB-7.5.00.32/dbdimp.c        2005-08-23 18:40:34.000000000 +0900
@@ -477,11 +477,12 @@
dbd_maxdb_internal_error(dbh, DBD_ERR_INITIALIZATION_FAILED_S, "Cannot get connection from environment");
    DBD_MAXDB_METHOD_RETURN(imp_dbh, dbd_maxdb_db_login6, SQLDBC_FALSE);
  }
-  if (! SQLDBC_Connection_connectASCII(imp_dbh->m_connection,
+  if (! SQLDBC_Connection_connectNTS(imp_dbh->m_connection,
                                       host,
                                       dbname,
                                       user,
                                       password,
+ SQLDBC_StringEncodingType_Encoding_UTF8,
                                       imp_dbh->m_connprop)==SQLDBC_OK){
dbd_maxdb_sqldbc_error(dbh, SQLDBC_Connection_getError(imp_dbh->m_connection)) ;
    DBD_MAXDB_METHOD_RETURN(imp_dbh, dbd_maxdb_db_login6, SQLDBC_FALSE);
@@ -967,7 +968,7 @@
    }
   }

-   retcode = SQLDBC_Statement_executeASCII (imp_dbh->m_stmt, statement);
+ retcode = SQLDBC_Statement_executeNTS (imp_dbh->m_stmt, statement,SQLDBC_StringEncodingType_Encoding_UTF8);
   if (retcode != SQLDBC_OK && retcode != SQLDBC_NO_DATA_FOUND){
dbd_maxdb_sqldbc_error(dbh, SQLDBC_Statement_getError(imp_dbh->m_stmt)); DBD_MAXDB_METHOD_RETURN (imp_dbh, dbd_maxdb_db_executeUpdate, DBD_MAXDB_ERROR_RETVAL);
@@ -1029,7 +1030,7 @@
      DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_FALSE);
    }
  }
- if (SQLDBC_PreparedStatement_prepareASCII (imp_sth->m_prepstmt, statement) != SQLDBC_OK) { + if (SQLDBC_PreparedStatement_prepareNTS (imp_sth->m_prepstmt, statement,SQLDBC_StringEncodingType_Encoding_UTF8) != dbd_maxdb_sqldbc_error(sth, SQLDBC_PreparedStatement_getError(imp_sth->m_prepstmt));
    DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_FALSE);
  }
@@ -1282,6 +1283,7 @@
        break;
        }
        case SQLDBC_SQLTYPE_VARCHARUNI    : {
+       m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
        break;
        }
        case SQLDBC_SQLTYPE_BOOLEAN       : {
@@ -1304,7 +1306,7 @@
        case SQLDBC_SQLTYPE_LONGE         :
        case SQLDBC_SQLTYPE_STRUNI        :
        case SQLDBC_SQLTYPE_LONGUNI       : {
-        m_col->hostType = SQLDBC_HOSTTYPE_ASCII;
+        m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
        ColumnLength = DBIc_LongReadLen(imp_sth);
        break;
        }
@@ -1788,7 +1790,7 @@
          }
          case sth_maxdb_option_CursorName:{
             char* cursorname = SvPV(valuesv,kl);
- SQLDBC_PreparedStatement_setCursorName (imp_sth->m_prepstmt, cursorname, kl, SQLDBC_StringEncodingType_En + SQLDBC_PreparedStatement_setCursorName (imp_sth->m_prepstmt, cursorname, kl, SQLDBC_StringEncodingType_En
             erg = SQLDBC_TRUE;
             break;
          }
@@ -1836,7 +1838,7 @@
        if( SQLDBC_PreparedStatement_getCursorName (
                          imp_sth->m_prepstmt,
                          cname,
-                          SQLDBC_StringEncodingType_Encoding_Ascii,
+                          SQLDBC_StringEncodingType_Encoding_UTF8,
                          cnameLen,
                          &bufferLength) != SQLDBC_OK){
               break;
@@ -1885,7 +1887,7 @@
        if( SQLDBC_PreparedStatement_getTableName(
                          imp_sth->m_prepstmt,
                          cname,
-                          SQLDBC_StringEncodingType_Encoding_Ascii,
+                          SQLDBC_StringEncodingType_Encoding_UTF8,
                          cnameLen,
                          &bufferLength) != SQLDBC_OK){
             break;
@@ -1910,7 +1912,7 @@
          if (SQLDBC_ResultSetMetaData_getColumnName (imp_sth->m_rsmd,
                                                      i,
                                                      cname,
- SQLDBC_StringEncodingType_Encoding_Ascii, + SQLDBC_StringEncodingType_Encoding_UTF8,
                                                      cnameLen,
&colnamelen) != SQLDBC_OK) { dbd_maxdb_internal_error(sth, DBD_ERR_CANNOT_GET_COLUMNNAME_D, i);
@@ -2178,6 +2180,11 @@
            parameter->value = newSViv(intval);
            break;
          }
+          case SQLDBC_SQLTYPE_UNICODE          :
+          case SQLDBC_SQLTYPE_VARCHARUNI          :
+         parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
+         parameter->value = newSVsv(value);
+         break;
          case SQLDBC_SQLTYPE_STRB          :
          case SQLDBC_SQLTYPE_LONGB         :
               case SQLDBC_SQLTYPE_CHB           :
@@ -2218,7 +2225,7 @@
          case SQLDBC_SQLTYPE_LONGE         :
          case SQLDBC_SQLTYPE_STRUNI        :
          case SQLDBC_SQLTYPE_LONGUNI       : {
-            parameter->hostType = SQLDBC_HOSTTYPE_ASCII;
+            parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
            paramlen = DBIc_LongReadLen(imp_sth);
            break;
          }


--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to