J'utilise freetds (v0.95.19)/unixODBC (2.3.1)/pyodbc (3.0.7) pour accéder à MS SQL Server 2012 depuis Ubuntu 12.04. Je veux récupérer la valeur d'un varchar (pas nvarchar), qui contient des caractères non-ASCII.La requête pyodbc renvoie différentes valeurs varchar lors de l'utilisation de tds version 7.1 versus 4.2
Si mon fichier odbc.ini est comme
[mydb]
Driver = FreeTDS
Description = mydb description
Trace = No
Server = mydb.xxxxx.xxx
Database = XXX
Port = 1433
Charset = UTF-8
TDS_Version = 4.2
Ensuite, la valeur récupérée est '\ x841 \ x84 \ xc1 \ xcd \ XC5; \ X9b * \ XF5 \ XB5 \ xc1} | \ xcbX' , qui est la valeur attendue.
Cependant, si je change simplement TDS_Version en 7.1, la valeur récupérée devient '? 1? \ Xc1 \ xcd \ xc5;? * \ Xf5 \ xb5 \ xc1} | \ xcb', qui remplace les caractères '\ x84' et '\ x9b' avec '?' et il manque le 'X' à la fin de la chaîne.
J'ai essayé tout ce que je pouvais penser (y compris la mise à jour de freetds, unixODBC, et pyodbc vers les dernières versions stables) mais rien ne semble jusqu'ici aider. L'utilisation de TDS version 4.2 a d'autres problèmes, alors j'espère vraiment faire fonctionner la version 7.1, mais je n'arrive pas à comprendre pourquoi les valeurs varchar récupérées ne sont pas correctes. BTW, mon fichier freetds.conf a le contenu suivant (si la version tds est 7.1 ou pas dans ce fichier ne semble pas affecter les résultats que je reçois avec pyodbc).
[global]
tds version=4.2
[mydb]
host = mydb.xxxxx.xxx
tds version = 7.1
port = 1433
client charset = UTF-8
en python (2.7.3) je
import pyodbc
conn=pyodbc.connect('DSN=mydb;DATABASE=XXX;UID=XXX;PWD=XXX')
cursor=conn.cursor()
cursor.execute("select myVarcharColumn from my.table where id=XXX").fetchone()