[freetds] Status of UTF-8 support in 0.83 dev

Sebastien FLAESCH sf at 4js.com
Thu Aug 14 11:09:14 EDT 2008


James K. Lowden wrote:
> Sebastien FLAESCH wrote:
>>  From my understanding, if on Windows you write a "UNICODE" UCS-2 ODBC
>> application using wchar_t/WCHAR, you have to bind using:
>>
>>      SQL_C_WCHAR + SQL_W[VAR]CHAR
>>
>> But what about UTF-8 ODBC applications in FreeTDS?
>>
>> Does FreeTDS ODBC consider that UTF-8 is an equivalent for the Microsoft
>> "UNICODE" and therefore must be bound with SQL_C_CHAR + SQL_W[VAR]CHAR?
>>
>> IBM DB2 CLI says UTF-8 data can be bound with SQL_[VAR]CHAR
> 
> I agree with IBM.  
> 
> "Wide" characters have a fixed width, usually 16 bits.  UTF-8 has a
> variable width and for the most part can be treated like ASCII (strlen(3)
> et al.).  Declaring UTF-8 as SQL_C_WCHAR incorrectly tells the driver
> there's a character in every two bytes.

Oh take care, actually there are 2 type specifications in SQLBindParameter:

SQLRETURN SQLBindParameter(
      SQLHSTMT     StatementHandle,
      SQLUSMALLINT     ParameterNumber,
      SQLSMALLINT     InputOutputType,
      SQLSMALLINT     ValueType,          -- This is the C type
      SQLSMALLINT     ParameterType,      -- This is the SQL equivalent
      SQLULEN     ColumnSize,
      SQLSMALLINT     DecimalDigits,
      SQLPOINTER     ParameterValuePtr,
      SQLINTEGER     BufferLength,
      SQLLEN *     StrLen_or_IndPtr);

For sure, when using (char *) / UTF-8, ValueType *must* be SQL_C_CHAR,
not SQL_C_WCHAR... (that one is for wchar_t).

I was talking about ParameterType...

Should it be  SQL_W[VAR]CHAR  or  SQL_[VAR]CHAR  when binding UTF-8?



> 
> --jkl
> _______________________________________________
> FreeTDS mailing list
> FreeTDS at lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds
> 




More information about the FreeTDS mailing list