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

DB2 Discussion :

problème "encodage" de caractères


Sujet :

DB2

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut problème "encodage" de caractères
    bonjour à tous,

    mon problème est le suivant.
    j'ai une procédure stockée qui me permet de vérifier la présence d'un email en base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from BLE_PROFIL where PROF_EMAIL=unPROF_EMAIL

    or lorsque que je donne ce mail : test_test@test.fr, il me renvoie qu'il existe déjà alors que ce n'ets pas le cas. Le seul mail ressemblant est celui ci : test-test@test.fr.

    ce qui me fait penser que DB2 utilise un _ ou un - de la même manière...

    est ce le cas?

    merci à vous

  2. #2
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Juin 2008
    Messages : 154
    Points : 225
    Points
    225
    Par défaut
    Une certitude : _ et - sont codifiés différemment dans les tables DB2, que tu sois en ASCII, en UNICODE ou en EBCDIC et quel que soit le CCSID. Par contre, tu peux avoir des problèmes de conversion entre ta requête et l'endroit où tu récupères le résultat. Es tu dans ce cas-là ?

    Désolé, mais sans info supplémentaire, je peux difficilement t'en dire plus.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    tu peux avoir des problèmes de conversion entre ta requête et l'endroit où tu récupères le résultat.
    c'est à dire?

    ma requête est utilisée telle qu'elle dans ma procédure (si le mail est trouvé je renvois -1) donc il n'y a aucun traitement de fait entre la requête et le moment là si c'est ta question.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    pdz74 a raison, le tiret et l'underscore n'ont rien à voir, a même titre que 'A' et 'B' sont différents. Ton problème vient d'ailleurs, surement une erreur de coding dans ta prostock.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    c'est à dire coding de ma prod stock?

    voilà le code en gros


    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
     
    LANGUAGE SQL
     
    P1: BEGIN
     
    declare unId integer default 0;
     
    DECLARE cursor1 CURSOR WITH RETURN FOR
     
       select unId as Id from matable FETCH FIRST 1 ROWS ONLY; 
     
       --pseudo existe pas
     
       if not exists (select * from matable where PSEUDO=unPSEUDO)then
     
          --email existe pas
     
            if not exists (select * from matable  where EMAIL=unEMAIL) then 
     
            else     
     
                set unId=-1;  --doublon login
     
            end if;
     
         end if;  
     
        open cursor1;       
     
    END P1

    et donc ensuite je récupère le unId c'est tout

  6. #6
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    bonjour
    le probleme de codepage est le très gros soucis que je sens venir pour les prochaines années.

    Souvent dans les problème d'encoding, le @ est transformé en à, et inversement.
    verifie la presence de test_testàtest.fr

    Si le test est positif, il te faudra vérifier tous les ccid (emulateur, table db2, db2...).

    bon courage

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    alors non mes @ sont bien des @

    du coup je reste quand même bien sur mon hypothèse du - = au _

    mais pourquoi??

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Tu es sur quelle plate-forme ?
    Quelle version ?

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    comment je peux savoir ca?

    sachant que ma base n'est pas en local

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    AS-tu essayé ceci, celà confirmera ou infirmera tes dires :


    Select * from sysibm.sysdummy1 where '_' = '-'
    ou encore
    Select * from sysibm.sysdummy1 where '_' like '%-%'
    ou encore
    Select * from sysibm.sysdummy1 where '-' like '%_%'

  11. #11
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    plutot que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from sysibm.sysdummy1 where '_' = '-'
    je coderai un truc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select * from sysibm.sysdummy1 where x'60' = '-' 
    ou
    Select * from sysibm.sysdummy1 where 60 = hex('-')

    en remplacant 60 par la bonne représentation HEX du caractère

  12. #12
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par K2R400 Voir le message
    AS-tu essayé ceci, celà confirmera ou infirmera tes dires :


    Select * from sysibm.sysdummy1 where '_' = '-'
    ou encore
    Select * from sysibm.sysdummy1 where '_' like '%-%'
    ou encore
    Select * from sysibm.sysdummy1 where '-' like '%_%'
    les 2 premières ne revoient rien, la 3e renvoie Y

    @bernard59139 : la première est fausse la deuxième ne renvoie rien

  13. #13
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Quel est le codepage de ton logiciel d'editeur ou d'émulateur?
    et quel est le code hexa de ton "_"?

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par bernard59139 Voir le message
    Quel est le codepage de ton logiciel d'editeur ou d'émulateur?
    et quel est le code hexa de ton "_"?
    j'ai pris le code hexa du "-" et non du "_", j'ai pris la valeur 45

    ca veut dire quoi la première f phrase je comprends pas bien...merci

  15. #15
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    x'45' ne correspond pas à un '-' dans mes tables de codepage.

    par contre 45 (décimal) = x'2D' = '-' dans les codepages ascii (windows francais, ms-dos) et utf-8 (unicode), vérifier pour les autres unicodes et ascii.

    comment as-tu obtenu cette valeur 45?

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Oups je m'étais trompé sur la dernière il fallait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from sysibm.sysdummy1 WHERE '-' LIKE '%$_%' ESCAPE '$'
    donc s'il te renvoie rien, on peut conclure qu'il ne considère pas '-' comme '_'.
    Regarde bien ta base, ton problème vient d'ailleurs.

    Et chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select hex('-'), hex('_') from sysibm.sysdummy1
    Donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ....+....1....+....2....           
    HEX ( '-' )  HEX ( '_' )           
        60           6D                
    ********  Fin de données  ********

  17. #17
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Et pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ....+....1....+....2....           
    HEX ( '-' )  HEX ( '_' )           
        60           6D                
    ********  Fin de données  ********
    c'est de l'EBCDIC.

    Pour mes 2 réponses, pour le code page exact, il faut fouiller un peu plus

    et d'accord avec K2R400, le problème est ailleur. J'ai fouillé plusieurs codepages différents, et je n'ai constaté aucune ambiguité quelque soit le codepage et dans les tables de translations utilisées.

  18. #18
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    ce qui est bizarre c'est pourquoi un simple select me renvoie les deux en identique si le problème ne vient pas de la base...

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Alors poste le code entier de ton simple select et le résultat !
    Dans l'informatique, il n'y a pas trop de place pour l'approxiamtif et le mystère, tout est binaire !

  20. #20
    Membre actif
    Inscrit en
    Novembre 2009
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2009
    Messages : 165
    Points : 216
    Points
    216
    Par défaut
    Si tu pouvais dire sur quelle plateforme se trouve les bases DB2 (Zos, AS400, WinDaub...) et à partir d'où tu exécutes ta requête, est-ce que tu passes par un logiciel quelconque tel que DB2Connect par exemple.

    Peux tu regarder dans les tables système les CCSID de tes tables, des tablespaces et de la database.

    Si par exemple, tes bases sont sur Zos et que tu passes ta requête à partir de windows, il faudrait peut-être passer la commande /D UNI,ALL pour voir quelles sont les tables de transco installées.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème d'encodage chaine de caractère
    Par DarkDrako dans le forum Langage
    Réponses: 2
    Dernier message: 16/11/2009, 08h46
  2. problème d'encodage avec les caractères spéciaux
    Par wind_vinch dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 23/10/2007, 12h47

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