FreeTDS: cómo establecer el conjunto de caracteres de los parámetros que ejecutan el procedimiento almacenado

Tengo un progtwig en C que se conecta a una base de datos MSSQL a través de FreeTDS .

Estoy tratando de ejecutar un procedimiento almacenado con un parámetro varchar establecido en algo como “Saída Liberada”, pero se está almacenando con caracteres extraños en MS SQL, como se muestra en la captura de pantalla anterior:

Saída Liberada con caracteres equivocados

Aquí está mi freetds.conf:

# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ # # This file is installed by FreeTDS if no file by the same # name is found in the installation directory. # # For information about the layout of this file and its settings, # see the freetds.conf manpage "man freetds.conf". # Global settings are overridden by those in a database # server specific section [global] # TDS protocol version tds version = 8.0 # Whether to write a TDSDUMP file for diagnostic purposes # (setting this to /tmp is insecure on a multi-user system) dump file = /tmp/freetds.log ; debug flags = 0xffff # Command and connection timeouts ; timeout = 10 ; connect timeout = 10 # If you get out-of-memory errors, it may mean that your client # is trying to allocate a huge buffer for a TEXT field. # Try setting 'text size' to a more reasonable limit text size = 64512 client charset = UTF-8 

Aquí hay partes del archivo de volcado de tds:

 log.c:196:Starting log file for FreeTDS 0.91 on 2016-05-17 19:19:41 with debug flags 0x4fff. iconv.c:330:tds_iconv_open(0xaed19130, ISO-8859-1) iconv.c:353:Using trivial iconv iconv.c:187:local name for ISO-8859-1 is ISO-8859-1 iconv.c:187:local name for UTF-8 is UTF-8 iconv.c:187:local name for UCS-2LE is UCS-2LE iconv.c:187:local name for UCS-2BE is UCS-2BE iconv.c:349:setting up conversions for client charset "ISO-8859-1" iconv.c:351:preparing iconv for "ISO-8859-1"  "UCS-2LE" conversion iconv.c:391:preparing iconv for "ISO-8859-1"  "ISO-8859-1" conversion iconv.c:394:tds_iconv_open: done ... net.c:741:Sending packet 0000 01 01 00 84 00 00 00 00-20 45 58 45 43 20 55 50 |........ EXEC UP| 0010 5f 49 4e 53 45 52 54 4d-4f 56 49 4d 45 4e 54 4f |_INSERTM OVIMENTO| 0020 20 27 32 30 31 36 2d 30-35 2d 31 37 20 31 39 3a | '2016-0 5-17 19:| 0030 31 39 3a 33 31 2e 30 30-30 27 2c 27 30 30 30 30 |19:31.00 0','0000| 0040 30 30 30 30 30 30 36 34-38 33 30 35 37 30 33 30 |00000064 83057030| 0050 27 2c 27 53 27 2c 30 2c-32 2c 27 50 43 56 43 30 |','S',0, 2,'PCVC0| 0060 34 20 3d 20 53 61 c3 ad-64 61 20 4c 69 62 65 72 |4 = Sa.. da Liber| 0070 61 64 61 27 2c 34 2c 27-50 43 56 43 4d 41 4e 41 |ada',4,' PCVCMANA| 0080 47 45 52 27 - |GER'| 

De acuerdo con el registro de freetds, está enviando el carácter ‘í’ (i agudo) como anuncio c3, lo que significa que lo está enviando como UTF-8 (LETRA PEQUEÑA LATINA CON AGUDA).

¿Cómo puedo configurar el cliente o el servidor, para que la cadena se pueda almacenar correctamente?

Actualización 1:

 # tsql -C Compile-time settings (established with the "configure" script) Version: freetds v0.91 freetds.conf directory: /etc MS db-lib source compatibility: no Sybase binary compatibility: yes Thread safety: yes iconv library: no TDS version: 4.2 iODBC: no unixodbc: yes SSPI "trusted" logins: no Kerberos: no # 

Actualización 2

Código para conectar:

 ret = SQLDriverConnect(db_msserver_dbc_handle, NULL, "Driver={FreeTDS};Server=FooBar;Port=1433;Database=Foo;UID=sa;PWD=pwd@123;APP=XPTO;TDS_Version=8.0;", SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_COMPLETE); 

Después de muchos bashs, no pude entender por qué no se respetan las configuraciones de freetds.conf (versión del juego de caracteres del cliente y tds). Al menos, cuando agrego TDS_Version = 8.0; ClientCharset = UTF-8 en la cadena de conexión , ¡funciona!

El registro se almacena correctamente cuando se cambia la cadena de conexión

 "Driver={FreeTDS};Server=%s;Port=%s;Database=%s;UID=%s;PWD=%s;APP=%s;TDS_Version=8.0;ClientCharset=UTF-8" 

Además, se cambia el encabezado del archivo de registro de freetds, mencionando la conversión de UTF-8:

 log.c:196:Starting log file for FreeTDS 0.91 on 2016-05-18 15:58:49 with debug flags 0x4fff. iconv.c:330:tds_iconv_open(0xaeb19118, UTF-8) iconv.c:353:Using trivial iconv iconv.c:187:local name for ISO-8859-1 is ISO-8859-1 iconv.c:187:local name for UTF-8 is UTF-8 iconv.c:187:local name for UCS-2LE is UCS-2LE iconv.c:187:local name for UCS-2BE is UCS-2BE iconv.c:349:setting up conversions for client charset "UTF-8" iconv.c:351:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion iconv.c:391:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion iconv.c:394:tds_iconv_open: done