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