IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

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


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		isql -v NOM_BASE login password
    		> OK
    MAIS au moment de lancer une requete en isql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    /etc/init.d/httpd restart
    Pour rendre la modification permanente, j'ai été modifier le fichier suivant sur ma red hat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     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

Discussions similaires

  1. Table vers Excel mémo de plus de 255 Caractères
    Par Roller0022 dans le forum WinDev
    Réponses: 1
    Dernier message: 05/06/2009, 13h12
  2. Avoir plus de 255 caractères pour un lien hypertexte
    Par alexandrebergercyr dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 14/02/2007, 21h27
  3. Réponses: 4
    Dernier message: 22/05/2006, 11h53
  4. Plus de 255 caractères
    Par krfa1 dans le forum Access
    Réponses: 7
    Dernier message: 13/03/2006, 17h01
  5. SQL de plus de 255 caractères dans un recordset
    Par acama dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 05/01/2006, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo