FreeTDS vers Microsoft SQL, plus de 255 caractères nvarchar?

Discussions à propos de MySQL, des autres bases de données existantes, et du langage SQL.

Modérateur : Modérateurs

Funzy
Nouveau membre
Messages : 6
Inscription : mar. 26 avr. 2011, 15:19

FreeTDS vers Microsoft SQL, plus de 255 caractères nvarchar?

Messagepar Funzy » mer. 19 sept. 2012, 16:45

Bonjour à tous,

Je rencontre des problèmes de communication entre un serveur RedHat et un serveur Microsoft SQL.
Le but est de remplir un formulaire en php. La requete se passe bien mais je ne récupère que 255 caractères en retour...
Dans ces formulaires, on retrouve deux champs de type texte et qui sont enregistrés dans une table sql serveur, dans un champ de taille 2000 et de type nvarchar. A la restitution, le formulaire php ne me renvoie que les 255 premiers caractères.
Et également lorsque je teste de faire des requetes en isql, je ne recois que les 255 premiers caractères.

La configuration est la suivante :
-1 serveur RedHat 2.6.18-308.8.2.el5 x64
-- apache httpd-2.2.3-65.el5_8
-- php php-5.1.6-39.el5_8
-- freetds freetds-0.91-2.el5 & freetds-devel-0.91-2.el5
+
-1 serveur MSSQL Windows 2003 R2 x86
--Microsoft SQL 2008 R2

Pour faire communiquer le serveur RedHat et le serveur SQL, j'utilise FreeTDS.
Ci-dessous la configuration de mes fichiers :

Code : Tout sélectionner

freetds.conf
  [global]
        # TDS protocol version
        tds version = 7.1
        dump file = /tmp/freetds.log
        debug flags = 0xffff
        text size = 64512
  [SRVSQLOSIDEV-RH]   
        host = srvsqlosi-dev
        instance = dosidev
        port = 1119                                 
        tds version = 8.0                   
        database = RH


Code : Tout sélectionner

odbcinst.ini
  [FreeTDS]
        Description = FreeTDS unixODBC Driver
        Driver = /usr/lib64/libtdsodbc.so
        Setup = /usr/lib64/libtdsS.so.1
        UsageCount = 4


Code : Tout sélectionner

odbc.ini
  [SRVSQLOSIDEV-RH]Driver          = FreeTDS
        Description     = SRVSQLOSIDEV-RH
        Server          = srvsqlosi-dev\dosidev
        Trace           = Yes
        TraceFile       = /var/log/freetds.log
        Port            = 1119
        TDS Version     = 8.0
        client charset  = UTF-8
        Database        = RH
        User            = *********
        Password        = ********
        Option          = 3
        ReadOnly        = No


La communication entre les serveurs est OK :

Pour vérifier le driver, la connexion tsql passe bien

Code : Tout sélectionner

tsql -S NOM_BASE -U login -P password
      > OK

Pour tester l'envoi de requête, la connexion isql passe bien également

Code : Tout sélectionner

isql -v NOM_BASE login password
      > OK

MAIS au moment de lancer une requete en isql

Code : Tout sélectionner

>SELECT accident_circonst FROM T_Agr where agr_Id=412
      resultat = Mr xxxxxxx à contacter le rds d interim (************) à 9H30 en indiquant ne pas se sentir capable de travailler aujourd hui suite à de violentes douleurs abdominales depuis plusieurs jours en précisant qu il avait eu beaucoup de mal à se rendr|
Je n'obtiens pas le resultat complet. Il y a un résultat qui se termine avec une "|" et la suite n'apparait pas.
Si je teste la requete directement sur le serveur SQL (management studio), je n'ai aucun problème, le résultat est complet.

Ma question : FreeTDS est-il capable de renvoyer plus de 255 caractères en nvarchar.
Sur la documentation, il me semble que c'est possible.

Merci d'avance pour vos réponses

Funzy
Nouveau membre
Messages : 6
Inscription : mar. 26 avr. 2011, 15:19

Re: FreeTDS vers Microsoft SQL, plus de 255 caractères nvarc

Messagepar Funzy » mer. 19 sept. 2012, 17:18

Je crois que le problème vient de la version tds utilisée.

Sur le site ci-dessous, il est indiqué :
htp://www.freetds.org/userguide/choosingtdsprotocol.htm
TDS 4.2 has limitations
varchar fields are limited to 255 characters. If your table defines longer fields, they'll be truncated.

or lorsque je fais un tsql -C , on voit bien que ma machine utilise TDS version = 4.2

Code : Tout sélectionner

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


Pourtant, dans mes fichiers de configuration freetds.conf et odbc.ini, j'ai bien indiqué que je souhaitai avoir la version 8.0.
Ma question change alors, Comment faire pour forcer ma machine a utilisé TDS version = 8.0 ?

En vous remerciant

Funzy
Nouveau membre
Messages : 6
Inscription : mar. 26 avr. 2011, 15:19

Re: FreeTDS vers Microsoft SQL, plus de 255 caractères nvarc

Messagepar Funzy » mar. 02 oct. 2012, 16:06

pb résolu!!!

je poste donc la solution que j'ai trouvé, ca pourra servir à quelqu'un!
il fallait que je change la variable d'environnement TDSVER=8.0.
Soit on peut faire

Code : Tout sélectionner

TDSVER=8.0

puis relance le serveur httpd

Code : Tout sélectionner

/etc/init.d/httpd restart


Pour rendre la modification permanente, j'ai été modifier le fichier suivant sur ma red hat

Code : Tout sélectionner

vim /etc/rc.d/init.d/functions

et ajouter

Code : Tout sélectionner

export TDSVER=8.0


au reboot, la requete SQL sur ma page php n'était plus tronquée.
par contre, lorsque je fais un

Code : Tout sélectionner

tsql -C

il est toujours indiqué TDS version = 4.2
mais bon, lorsque je fais

on a bien TDSVER=8.0


Revenir vers « SQL »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité