Bonjour,
Je suis en train de réaliser une requête sql pour extraire du texte d'un champ image.
Les base/tables n'ont pas été créé par moi mais par le logiciel que j'utilise.
Mon soucis est que le texte extrait contient des accents, et il ne s'affiche pas correctement (Problème de charset je suppose au vu des caractères affichés, tous les caractères à accent s'affichent en deux caractères "bizarres").
Je fais mes requêtes sous "Analyseur de requêtes SQL" et mes bases sont sous SQL SERVER 2005.
Je met ma requête complète au cas où un élément auquel je n'aurais pas pensé interférerait:
J'ai plusieurs questions sur lesquels je n'ai pas trouvé de réponse encore:
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
16
17
18 select /*hi0.nrid, hi0.date_deb, hi0.ref, hi0.status, hi0.sujet, hi0.societe, hi0.personne, hi0.titulaire, hi0.so0_nrid, hi0.type, so0.code_post, so0.loc, so0.var2, so0.var11, */ dm0.title , convert(varchar(1200), convert(binary(1200), substring(dm0.memo,1,1200))) collate SQL_Latin1_General_CP850_CI_AS from SYSADM.hi0 hi0 left outer join SYSADM.dm5 dm5 on dm5.hi0_nrid = hi0.nrid left outer join SYSADM.dm0 dm0 on dm5.dm0_nrid = dm0.nrid inner join SYSADM.so0 so0 on hi0.so0_nrid=so0.nrid inner join SYSADM.am0 am0 on hi0.titulaire = am0.titulaire inner join SYSADM.am00 am00 on am00.nrid = am0.team_nrid where hi0.ref in ('C-Visite') and hi0.titulaire = 'R12' and hi0.date_deb >= '01-01-2008' order by hi0.date_deb, so0.reg_code, hi0.titulaire
Première question:
La différence entre VARCHAR ET NVARCHAR influe t'elle sur la prise en charge de la collation sur la requête, je m'explique, j'ai lu (lien ci-dessous) que NVARCHAR est une donnée UNICODE, mais je ne comprends pas bien, ca veut dire que l'on ne peut mettre que des caractères UNICODE dans un NVARCHAR ? (ie: des chaines utf8?)
Et les VARCHAR sont indépendant du jeu de caractère de la chaîne?
http://msdn.microsoft.com/fr-fr/libr...9(SQL.90).aspx
http://msdn.microsoft.com/fr-fr/libr...9(SQL.90).aspx
Seconde question:
Est-ce que l'extraction de mon champ image est correcte?
convert(varchar(1200),convert(binary(1200), substring(dm0.memo,1,1200)))
J'ai réalisé plusieurs essai avec cast et convert, cela semble est bon.
http://msdn.microsoft.com/en-us/libr...8(SQL.90).aspx
Ici j'ai vu que la conversion d'un champ image est implicite en binary/varbinary(même timestamp).
Ensuite un binary ou un varbinary est convertible implicitement en varchar ou nvarchar.
Si l'on met directement convert(varchar(1200), substring(dm0.memo,1,1200)) par quel mécanisme passe-t-on pour obtenir le varchar, le binary ou le varbinary, cela a t-il une influence sur le jeu de caractère?
Troisième question:
La vrai question, dans un sens, est-ce que la manière d'écrire le collate est correct?
Le nom de l'interclassement "SQL_Latin1_General_CP850_CI_AS" a été obtenu en regardant les propriétés de la base, étant donné que c'est celui de la base, je ne comprends pas pourquoi en sortie (à l'affichage dans les résultats de ma requête)
Code : Sélectionner tout - Visualiser dans une fenêtre à part collate SQL_Latin1_General_CP850_CI_AS
Pour information j'ai déjà lu les articles suivant:
http://sqlpro.developpez.com/cours/s...er/collations/
Mais cela ne m'a pas aidé.
Je suis arrivé au bout de mes connaissances en matière de jeu de caractère et je remercie d'avance toute personne pouvant me donner piste de recherche ou solution.
PS: Je reste à disposition pour toutes questions complémentaires.
Partager