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]