Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/04/2011, 11h48   #1
Invité de passage
 
Homme
Architecte de système d'information
Inscription : mars 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : mars 2011
Messages : 19
Points : 0
Points : 0
Par défaut Type xml avec accent et chaine très longue

Bonjour à tous,

Je cherche à stocker une chaine très longue (> 100000 caractères) et au format XML dans une table.
Le problème c'est que je risque d'avoir des accents dans ma chaine et du coup:
Code :
XML parsing: line 1084, character 29, illegal xml character
A ce que j'ai compris ça serait à cause de l'utf-8 dans ma balise d'en-tête?

Alors j'ai googlé mon problème et j'ai trouvé cette solution:
Code :
1
2
3
4
5
6
7
8
DECLARE @strXML nvarchar(1000);
SET @strXML = '<?xml version="1.0" encoding="utf-8"?>'
SET @strXML = REPLACE(@strXML, '"utf-8"', '"utf-16"');
SELECT @strXML;
 
DECLARE @myxml xml;
SET @myxml = @strXML;
SELECT @myxml;
Sauf que ma chaine ne rentre pas dans un nvarchar et que je n'arrive pas à utiliser le type text, parce que, vous avez du vous en rendre compte, j'y connais rien en SQL :/

Alors j'aurais voulu avoir vos impressions sur ce problème, et des pistes de réflexion entre le pas trop flou et la réponse toute faite, si vous avez 2-3 minutes à m'accorder en ce 1 avril

Bonne journée!
zobbyzobba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 12h28   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Stockez là directement dans une colonne de type VARCHAR(max) cela permet 2 milliards de caractères.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 13h32   #3
Invité de passage
 
Homme
Architecte de système d'information
Inscription : mars 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : mars 2011
Messages : 19
Points : 0
Points : 0
Merci
En effet ça a l'air de mieux se passer.
En plus, j'ai découvert un truc! (basique pour vous mais pour moi n'y connaissant pas grand chose c'est important) J'ai découvert que la valeur du paramètre du varchar était des octets! et non pas des le nombre de caractères ^^

Sinon lors de l'affectation de ma chaine en xml j'ai une nouvelle erreur:
Code :
XML parsing: line 1, character 40, unable TO switch the encoding
Trop bizarre puisque la ligne en question est une ligne comme les autres

Merci en tout cas pour votre aide!

Bonne journée
zobbyzobba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 14h41   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
J'ai découvert que la valeur du paramètre du varchar était des octets! et non pas des le nombre de caractères

Faux, varchar(50): 50 caractères chacun codé sur un octet(+ stockage de la longueur effective)
nvarchar(50): 50 caractères chacun codé sur deux octets (+ stockage de la longueur effective).
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 14h44   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Bonjour,

Citation:
J'ai découvert que la valeur du paramètre du varchar était des octets! et non pas des le nombre de caractères ^^
Soyons plus précis : en varchar tout caractère stocké occupe 1 octet, puisqu'alors ASCII est utilisé.

Si vous passez votre colonne un Unicode (nvarchar), alors vous consommerez deux octets par caractère

En revanche en Unicode vous pouvez stocker n'importe quel caractère existant de n'importe quel alphabet, alors qu'en ASCII vous ne pouvez stocker que des caractères latins

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 16h51   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par zobbyzobba Voir le message
J'ai découvert que la valeur du paramètre du varchar était des octets! et non pas des le nombre de caractères ^^
C'est sous Oracle que l'on a ce comportement par défaut.
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 08h08   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
On notera au passage que l'utilisation d'une colonne varchar implique en plus de la longueur de la chaîne elle même 2 octets supplémentaires qui permettent de stocker l'offset de fin de chaîne dans la page dans laquelle elle est stockée

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h09.


 
 
 
 
Partenaires

Hébergement Web