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

MS SQL Server Discussion :

Charger des donées codées en EBCDIC dans une base UTF8


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut Charger des donées codées en EBCDIC dans une base UTF8
    Salut

    Est ce qu'il est possible de charger un fichier formaté en EBCDIC xxx (parce qu'en plus on en a plusieurs, genre EBCDIC 870) dans une base de données dont les données sont en unicode ?

    En fait je cherche la table des formats supportés par SQL Serveur au niveau des fichiers de formats, savoir s'il gère EBCDIC

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour,

    vous devez les convertir avant en ASCII.

    Est-ce que ces fichiers proviennent d'une base DB2 sur machines ebcdic ?
    Il y a un driver (OLEDB for DB2, fourni avec MS Host Integration Service) permettant à SQL Server de lire les données directement, et ce driver lui, se charge de la conversion.
    Emmanuel T.

  3. #3
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par kagemaru Voir le message
    bonjour,

    vous devez les convertir avant en ASCII.

    Est-ce que ces fichiers proviennent d'une base DB2 sur machines ebcdic ?
    Il y a un driver (OLEDB for DB2, fourni avec MS Host Integration Service) permettant à SQL Server de lire les données directement, et ce driver lui, se charge de la conversion.
    En fait il s'agit d'une extraction d'une base de données sur laquelle je n'ai aucun contrôle. On recoit les fichiers par CFT et la conversion EBCDIC -> ASCII pose problème... Du coup, on a trouvé la solution de gérer directement la transco par un programme homemade qui va convertir les fichiers d'un format à l'autre une fois le fichier recu

    J'ai fais un tour rapide de SQL Server, il ne semble pas gérer EBCDIC en natif (et le driver OLEDB for DB2 ne peux pas m'interesser vu que je n'ai aucun moyen d'accéder aux données sources)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    c'est bien dommage pour CFT, en général il convertit très bien l'EBCDIC en ASCII . Mais c'est un autre sujet
    Emmanuel T.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Pas de SQL Server sous la main, mais vérifiez s'il n'existe pas une collation EBCDIC auquel cas vous pouvez travailler directement vos données à ce format dans SQL Server.

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

  6. #6
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Il y a EBCDIC dans les interclassement de SQL Server 2005, mais apparemment, la solution a été envisagée sans succès... du coup je suis en train de développer un convertisseur de fichiers qui convertit les fichiers d'un codepage sur 1 octet, dans un codepage donné avec une table de transco personnalisée... comme ça, on pourra convertir nos divers fichiers au formats EBCDIC en UTF16 (dans la solution envisagée)

    Toutefois je pense que je continuerai à chercher du coté des interclassements

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    la solution a été envisagée sans succès
    vous pouvez préciser ?
    Emmanuel T.

  8. #8
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    De mémoire :

    Il me semble que les bases ont étés transposées en interclassement EBCDIC, mais ennsuite, il y avait des problèmes de collation avec les autres bases de données (ou alors la solution a été vaguement envisagée, mais le DBA a préféré ne pas risquer pour ne pas avoir le problème sus-cité mais je me rapelle plus, c'était la semaine dernière, et depuis j'ai fais pas mal de choses)

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    En effet, lorsque vous comparez ou joignez 2 chaines ou 2 colonnes littérales il faut que la collation soit identique au niveau de ces colonnes. Si la collation n'est précisée au niveau de la colonne (ce qui est le cas la plupart du temps), SQL Server se base sur la collation de la base.
    Emmanuel T.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Votre DBA devrait suivre un cours, comme ceux que rudi et moi donnons à Orsys, car la problé"matique est simpel à résoudre et votre dba n'est pas allé bien loin pour son effort de recherche.

    J'ai écrit il y a bien longtemps un papier sur les collations qui est sur ce serveur :
    http://sqlpro.developpez.com/cours/s...er/collations/

    Démonstration de la solution : il suffit simplement de rajouter une clause COLLATE dans les requêtes pour que cela marche !
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    CREATE TABLE T_DATA_EBCDIC 
    (COL VARCHAR(16) COLLATE SQL_EBCDIC037_CP1_CS_AS)
    GO
     
    INSERT INTO T_DATA_EBCDIC VALUES ('azertyuiopéàÂÖ')
    GO
     
    CREATE TABLE T_DATA_FRENCH 
    (COL VARCHAR(16) COLLATE French_CI_AI)
    GO
     
    INSERT INTO T_DATA_FRENCH VALUES ('azertyuiopéàÂÖ')
    GO
     
    SELECT *
    FROM   T_DATA_EBCDIC AS E
           INNER JOIN T_DATA_FRENCH AS F
                 ON E.COL = F.COL
     
    /*
    sg 468, Niveau 16, État 9, Ligne 2
    Impossible de résoudre le conflit de classement entre 'French_CI_AI' et 'SQL_EBCDIC037_CP1_CS_AS' dans l'opération equal to.
    */
     
    SELECT *
    FROM   T_DATA_EBCDIC AS E
           INNER JOIN T_DATA_FRENCH AS F
                 ON E.COL = F.COL COLLATE French_CI_AI
     
    COL              COL
    ---------------- ----------------
    azertyuiopéàÂÖ   azertyuiopéàÂÖ
    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/ * * * * *

  11. #11
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Votre DBA devrait suivre un cours, comme ceux que rudi et moi donnons à Orsys, car la problé"matique est simpel à résoudre et votre dba n'est pas allé bien loin pour son effort de recherche.

    J'ai écrit il y a bien longtemps un papier sur les collations qui est sur ce serveur :
    http://sqlpro.developpez.com/cours/s...er/collations/

    Démonstration de la solution : il suffit simplement de rajouter une clause COLLATE dans les requêtes pour que cela marche !
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    CREATE TABLE T_DATA_EBCDIC 
    (COL VARCHAR(16) COLLATE SQL_EBCDIC037_CP1_CS_AS)
    GO
     
    INSERT INTO T_DATA_EBCDIC VALUES ('azertyuiopéàÂÖ')
    GO
     
    CREATE TABLE T_DATA_FRENCH 
    (COL VARCHAR(16) COLLATE French_CI_AI)
    GO
     
    INSERT INTO T_DATA_FRENCH VALUES ('azertyuiopéàÂÖ')
    GO
     
    SELECT *
    FROM   T_DATA_EBCDIC AS E
           INNER JOIN T_DATA_FRENCH AS F
                 ON E.COL = F.COL
     
    /*
    sg 468, Niveau 16, État 9, Ligne 2
    Impossible de résoudre le conflit de classement entre 'French_CI_AI' et 'SQL_EBCDIC037_CP1_CS_AS' dans l'opération equal to.
    */
     
    SELECT *
    FROM   T_DATA_EBCDIC AS E
           INNER JOIN T_DATA_FRENCH AS F
                 ON E.COL = F.COL COLLATE French_CI_AI
     
    COL              COL
    ---------------- ----------------
    azertyuiopéàÂÖ   azertyuiopéàÂÖ
    A +
    Notre DBA est en fait développeur et non DBA de formation, on a un vrai DBA, mais il ne travaille pas sur ce projet (et lui n'a pas pu nous renseigner )

    Le problème est surtout que la base de données a mal été conçue au départ (il n'y avait pas de DBA) et maintenant on s'en mords les doigts... En fait on ne pensait pas qu'on aurait de problème avec les fichiers recus en divers formats EBCDIC (car venant de plusieurs pays)

    En tout cas, je note aussi ca dans un coin

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2012, 09h54
  2. Réponses: 3
    Dernier message: 24/09/2008, 14h33
  3. Réponses: 7
    Dernier message: 21/03/2007, 23h28
  4. Réponses: 2
    Dernier message: 13/01/2007, 23h04
  5. [VB]stocker des données de pages web dans une base
    Par tofito dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/02/2006, 11h02

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