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

Requêtes MySQL Discussion :

empêcher modification données lors d'un changement de type


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut empêcher modification données lors d'un changement de type
    Bonjour

    Résumé : peut-on empêcher MySQL de modifier des données lors d'un changement de type ?

    Détail : j'utilise MySQL depuis peu et je constate que lorsque que l'on change le type d'un champ, les données sont modifiées ("aaa" dans un champ texte devient 0 dans un champ numérique). La documentation MySQL explique d'ailleurs assez bien les changements opérés. Je connais un autre logiciel de base de données (Access... désolé) qui provoquait une erreur si les données n'étaient pas conforme au nouveau type (genre : type de données incompatible dans l'expression du critère). C'est ce comportement que je voudrais dans MySQL.
    Existe-t-il une option de paramètrage de MySQL qui soit plus strict avec les changements de type ?

    Merci

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    A priori ce n'est pas possible et ce pour une bonne raison : un utilisateur qui a les privilèges ALTER TABLE est censé savoir ce qu'il fait...
    Ca t'arrive souvent ce genre de "boulette" ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je développe une application de traitement de fichiers de données (csv au départ donc type texte). Un moyen pratique et surtout rapide pour tester si une colonne texte peut être converti est justement de tenter une conversion. Ce n'est visiblement pas la façon de procéder avec MySQL. J'observe également que l'on peut faire une requête INSERT ou UPDATE avec des valeurs qui ne soient pas dans le bon type. MySQL ne renvoit aucun message particulier et change les valeurs à notre place. Je trouve que ce procédé manque de rigueur (tranformer "aaa" en date donne 0000-00-00, on ne voit pas bien pourquoi). Je n'ose imaginer le nombre de bases de données avec des données fausses si une vérification rigoureuse n'a pas été faites avant. S'il n'y a pas d'autres solutions, je vais devoir évaluer chaque valeur (en recréant d'ailleur la fonction IsNumeric d'Access...). Je trouve quand même que la technologie Php/MySQL est globalement performante

  4. #4
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Bonjour,

    Je ne peux que conseiller l'utilisation de SQL MODE si la version du serveur MySQL est suffisament récente : Documentation officielle

    J'ai testé sur un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SET GLOBAL SQL_MODE = TRADITIONAL 
    CREATE TABLE insertnum(num INT NOT NULL)
    INSERT INTO insertnum VALUES (1)
    INSERT INTO insertnum VALUES ('voiture')
    et j'obtiens une erreur sur la dernière requête :
    Out of range value adjusted for column 'num' at row 4
    En effet, dans la table, je n'ai que le premier enregistrement avec la valeur 1

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Super ! Merci : c'est exactement ce que je cherchais. Je doutais qu'une base de données aussi puissante que MySQL permette des conversions aussi douteuses... Le "bon" mode SQL (selon moi) s'appelle d'ailleurs TRADITIONAL...
    J'en ai profité pour faire des comparaisons avec d'autres bases Open source :
    - PostGresQL : ne permet pas de convertir un champ de type texte en type numérique, même si les données sont toutes numériques :
    ERROR: column "name" cannot be cast to type "pg_catalog.int4"
    - Firebird : idem :
    Cannot change datatype for column TXT from a character type to a non-character type
    Finalement, MySQL est plus souple avec ce mode TRADITIONAL...

    Merci encore d'avoir pris le temps de me répondre.

    Gonzague

  6. #6
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Merci de valider le sujet avec le bouton résolu la prochaine fois alors
    Bon courage !

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

Discussions similaires

  1. [Débutant] Sauvegarde de données lors d'un changement d'écran
    Par Axel_E dans le forum Visual Studio
    Réponses: 9
    Dernier message: 05/05/2015, 10h05
  2. Que faire des index lors d'un changement de type d'une colonne ?
    Par Kropernic dans le forum Administration
    Réponses: 2
    Dernier message: 12/12/2012, 11h24
  3. Réponses: 9
    Dernier message: 15/03/2007, 11h56
  4. Réponses: 5
    Dernier message: 14/08/2006, 04h04
  5. Réponses: 2
    Dernier message: 25/04/2006, 10h32

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