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

PHP & Base de données Discussion :

Comment fixer la collation dans ma bd ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut Comment fixer la collation dans ma bd ?
    Bonjour,

    J'ai trouvé comment demander à ma bd de travailler en latin1 au lieu d'utf8, mais je m'aperçois qu'alors la collation dans l'objet charset est par défaut « latin1_swedish_ci ».
    J'ai trouvé une commande sur le Net : ->query("SET collation_connection = latin1_general_ci");
    Mais ça n'a rien changé.

    Alors comment je dois faire, et quelle est la meilleur collation pour le français insensible à la casse ?

    Merci.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Bon, alors en continuant mes recherches, j'ai appris que d'abord on ne dit pas collation, mais interclassement, tant mieux, je n'aime pas utiliser les termes anglais, c'est une preuve de paresse ;-)
    Ensuite, je vois qu'avec MySQL on peut définir un interclassement un peu partout, pour la base, une table, voire une colonne.
    Tout ce qu'il me faut c'est le fixer pour la base après la connexion. Ma base est une conversion d'une base Access et tout y est latin1 ordinaire.

    Donc, après la connexion je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $application->database->set_charset("latin1")){
    $application->database->query("SET collation_connection = 'latin1_general_ci'");
    var_dump ($application->database->get_charset());
    Et j'obtiens ceci :
    object(stdClass)#3 (8) {
    ["charset"]=> string(6) "latin1"
    ["collation"]=> string(17) "latin1_swedish_ci"
    ["dir"]=> string(0) ""
    ["min_length"]=> int(1)
    ["max_length"]=> int(1)
    ["number"]=> int(8)
    ["state"]=> int(1)
    ["comment"]=> string(0) "" }

    On voit que le charset a bien été changé de l'utf8 de défaut pour le latin1, mais la « collation » est restée au suédois .
    Qu'est-ce je fais qui n'est pas correct ?

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    et en ajoutant ceci

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Merci, mais mon problème n'est pas pour avoir le latin1, mais avec ["collation"]=> string(17) "latin1_swedish_ci".
    Mon site n'est pas en suédois mais en français.

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    ok, continuons :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SET NAMES 'latin1' COLLATE 'latin1_general_ci'

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Merci, mais ça ne marche pas non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // établir la connection à la base de données
    $application->database = new mysqli($servername,$username,$password,$dbname);
    $application->database->query("SET NAMES 'latin1' COLLATE 'latin1_general_ci'") or trigger_error(mysqli_error(), E_USER_ERROR);
    var_dump ($application->database->get_charset());
    et ça me donne :
    object(stdClass)#3 (8) {
    ["charset"]=> string(4) "utf8"
    ["collation"]=> string(15) "utf8_general_ci"
    ["dir"]=> string(0) "" ["min_length"]=> int(1)
    ["max_length"]=> int(3)
    ["number"]=> int(33)
    ["state"]=> int(1)
    ["comment"]=> string(13) "UTF-8 Unicode" }
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $application->database->set_charset("latin1") or trigger_error(mysqli_error(), E_USER_ERROR);
    $application->database->query("SET collation_connection = 'latin1_general_ci'") or trigger_error(mysqli_error(), E_USER_ERROR);
    J'arrive au moins à obtenir un charset latin1, mais toujours avec la collation suédoise

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    à part te taper la modification à la main pour les objets contenus dans la base de données, je ne vois pas.
    Tu peux aussi générer le tout en attaquant les tables de information_schema.tables

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    N'empêche que c'est supposé marcher, est-ce que ça serait un bogue ?
    J'utilise php 7 et MySQL 5.7

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Je ne sais pas si c'est un bogue mais si avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $application->database->set_charset("latin1"));
    $application->database->query("SET collation_connection = 'latin1_general_ci'");
    $application->database->query("SET NAMES 'latin1' COLLATE 'latin1_general_ci'");
    var_dump ($application->database->get_charset());
    tu restes bloqué sur l'interclassement par défaut c'est-à-dire le suédois (pays d'origine de MySQL) c'est qu'il va te falloir te taper des ALTER en pagaille

    D'ailleurs à la migration, ce souci n'a pas été intercepté ?

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Je ne sais pas si c'est un bogue mais si avec ça tu restes bloqué sur l'interclassement par défaut c'est-à-dire le suédois (pays d'origine de MySQL) c'est qu'il va te falloir te taper des ALTER en pagaille
    Donc en d'autres termes il y a un bogue !

    D'ailleurs à la migration, ce souci n'a pas été intercepté ?
    Pas que je sache, j'ai utilisé MySQL workbench, il ne m'a même pas demandé si je voulais conserver iso-8859-1 ou non et en quelle langue étaient mes données,
    Tout ce qu'il m'a signalé c'est qu'il ne pouvait pas traduire les requêtes d'Access en view parce que la lecture d'une table système n'était pas autorisée, ce qui est faut, je suis capable de les voir avec un autre outil ODBC que j'ai développé moi-même.

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Le plus simple : dump des données la base, ensuite extraction DDL, puis notepad++, modif partout de l'interclassement et recréation de la base suivi de l'import de la sauvegarde.

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

Discussions similaires

  1. comment fixer une colonne dans un Jtable
    Par pianetdi dans le forum Composants
    Réponses: 5
    Dernier message: 30/01/2014, 19h12
  2. Réponses: 11
    Dernier message: 30/09/2010, 17h33
  3. Réponses: 1
    Dernier message: 19/02/2010, 15h20
  4. comment fixer le port de communication dans un socket
    Par dalilnet dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/07/2009, 19h04
  5. Comment fixer une date dans un champ !
    Par LATHIOS dans le forum Access
    Réponses: 8
    Dernier message: 17/06/2005, 19h44

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