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

Langage SQL Discussion :

Risque d'erreur conversion implicite en string


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut Risque d'erreur conversion implicite en string
    Bonjour à tous,

    Voilà, petite question que je me pose : est ce qu'il y a un risque lorsque l'on convertit une colonne d'un certain type en char, notament, sans passer par un opérateur de type ?

    Je souhaite savoir s'il y a un type sur lequel ca pourrait créer une erreur, sans tenir compte d'un erreur de longueur...
    Je prends le postula que mon char de destination fait 1000 caractères, et que ma source fait forcément moins (on va éviter d'envoyer un blob dans mon char par exemple, car là, je sais que ca va pas passer)

    Merci d'avance pour vos retours d'expérience.


    Steven

  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 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(123456789876543234567898765434567890987654345678 AS CHAR(250))

    Msg*1007, Niveau*15, État*1, Ligne*1
    Le nombre '123456789876543234567898765434567890987654345678' sort des limites de représentation numérique (précision maximale*38).


    Après tout dépend de votre SGBDR.... Avec une passoire comme MySQMerde... difficile de savoir ce qu'il va faire !


    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 éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Ouais donc ce genre de problème est intrinséquement lié à la base qu'on utilise....

    Typiquement, je suis sur oracle, et l'exemple que vous avez donné fonctionne parfaitement bien.

    Et ce que je veux savoir, c'est surtout ce qu'il se passe lors d'une convertion implicite.
    Typiquement, en PL/SQL, le script que j'étudie récupère dans une variable de type char (pour sortir l'information dans un fichier) tout un tas de données, et le cast n'est jamais utilisé.
    Je voulais donc savoir s'il fallait que je corrige ca car y'a un risque certain, ou si le risque et minime et donc si je peux me concentrer sur d'autres corrections en attendant.

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 152
    Points : 7 402
    Points
    7 402
    Billets dans le blog
    1
    Par défaut
    Un risque potentiel, bien présent avec JavaScript (on, s'éloigne du SQL), c'est le choix de la base pour la représentation du nombre en sortie.

    En effet, un paramètre X ou Y peut faire en sorte que la conversion implicite de la valeur numérique 255 ne soit pas "255", mais "FF" ou "0x000000FF", "11111111" ou encore "377" (base 8).

    Par exemple, en JavaScript, "paserInt(11)" sans autre argument n'est pas égale à 11 mais à 9 car par défaut c'est en base 8.

    Autre risque potentiel, l'encodage indésirable.

    Si vous avez un fichier encodé par exemple en UNICODE 16, la conversion implicite peut éventuellement produire du ASCII 7 bits ou inversement, et ainsi introduire des caractères déconnants dans votre fichier de sortie.

    Après, ceci dit, une bête conversion genre "to_char(n)" produira sans doute les mêmes risques : il faut jouer avec les paramètres de conversion et d'encodage.
    On ne jouit bien que de ce qu’on partage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/10/2006, 09h01
  2. [Débutant] Conversion d'un String en Int
    Par chleuh dans le forum Langage
    Réponses: 9
    Dernier message: 30/12/2004, 13h33
  3. [C#] Conversion d'un string en byte[] et inversement
    Par david71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/12/2004, 15h10
  4. Réponses: 2
    Dernier message: 21/06/2004, 15h55
  5. [VB.NET] Erreur conversion de code c=>vb (opendialogfile)
    Par hirochirak dans le forum Windows Forms
    Réponses: 19
    Dernier message: 02/06/2004, 16h31

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