Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1

    Inscrit en
    juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 10
    Points : -1
    Points
    -1

    Par défaut FreeTDS vers Microsoft SQL, plus de 255 caractères nvarchar?

    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.
    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 :

    freetds.conf
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    [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 = 111
    tds version = 8.0
    database = RH
    odbcinst.ini
    Code :
    1
    2
    3
    4
    5
    6
     
    [FreeTDS]
    Description = FreeTDS unixODBC Driver
    Driver = /usr/lib64/libtdsodbc.so
    Setup = /usr/lib64/libtdsS.so.1	
    UsageCount = 4
    odbc.ini
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    [SRVSQLOSIDEV-RH]
    Driver          = FreeTDS                     # [NOM_DU_DRIER] le meme que dans odbcinst.ini
    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 :
    1
    2
    		tsql -S NOM_BASE -U login -P password
    		> OK
    Pour tester l'envoi de requête, la connexion isql passe bien également
    Code :
    1
    2
    		isql -v NOM_BASE login password
    		> OK
    MAIS au moment de lancer une requete en isql
    Code :
    1
    2
    >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 avec une "|" à la fin, le reste du message n'apparait pas.
    Si je teste la requete 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

  2. #2

    Inscrit en
    juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 10
    Points : -1
    Points
    -1

    Par défaut FreeTDS vers Microsoft SQL, plus de 255 caractères nvarchar?

    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [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 par avance

  3. #3

    Inscrit en
    juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 10
    Points : -1
    Points
    -1

    Par défaut Résolu!!

    Bonjour,

    Je reviens vers vous car j'ai trouvé la solution à mon problème, il fallait que je change la variable d'environnement TDSVER=8.0.
    Soit on peut faire
    puis relance le serveur httpd
    Code :
    /etc/init.d/httpd restart
    Pour rendre la modification permanente, j'ai été modifier le fichier suivant sur ma red hat
    Code :
     vim /etc/rc.d/init.d/functions
    et ajouter
    au reboot, la requete SQL sur ma page php n'était plus tronquée.
    par contre, lorsque je fais un
    tsql -C
    il est toujours indiqué TDS version = 4.2
    mais bon, lorsque je fais
    env
    on a bien TDSVER=8.0

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •