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

Développement SQL Server Discussion :

Type xml avec accent et chaine très longue


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    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
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 795
    Par défaut
    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).

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    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

    @++

  6. #6
    Invité
    Invité(e)
    Par défaut
    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.

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    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

    @++

Discussions similaires

  1. Parser un fichier XML avec accent
    Par Enthau dans le forum Général Python
    Réponses: 7
    Dernier message: 17/09/2012, 23h40
  2. Charger un fichier xml avec accent ?
    Par jbjean dans le forum C#
    Réponses: 2
    Dernier message: 10/04/2012, 18h19
  3. Requete sur un type Xml avec xquery
    Par pgenet dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/02/2010, 15h49
  4. WL9 : Pb avec une action struts très longue
    Par spirodeau dans le forum Weblogic
    Réponses: 1
    Dernier message: 30/07/2009, 10h19
  5. [DOM4J] Problème pour "parser" un fichier XML avec accents
    Par mlny84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/11/2007, 19h06

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