Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2011, 19h17   #1
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Par défaut latin1_general_ci erreur 1267

Bonjour,
L'aventure continue
Sur un serveur mutualisé.
Voici le code d'erreur que je reçois en retour de mes requêtes :
Code :
PDO::query() [<a href='pdo.query'>pdo.query</a>]: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_general_ci,IMPLICIT) AND (latin1_swedish_ci,IMPLICIT) FOR operation 'like' IN monsite.php
Pourtant, j'ai tout passé en latin1_general_ci :
  • L'entête de la page : <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  • Le charset du fichier ISO...
  • Interclassement pour la connexion MySQL
  • L'interclassement de la base de données
  • L'interclassement de la table et de ses champs
Les variables du serveur sont :
  • character set client : utf8
  • character set connection latin1_general_ci
  • character set database latin1
  • character set results utf8
  • (Valeur globale) latin1
  • character set server latin1
  • collation server latin1_swedish_ci
Évidemment je ne peux pas changer les paramètres fondamentaux d'un serveur mutualisé.
Voyez-vous une astuce ?
Je pense à utiliser la fonction de MySQL dans chacune de mes requêtes ; je trouve cela un peu lourd toutefois et je ne suis d'ailleurs pas sûr du résultat...
Merci !
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 18h12   #2
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Par défaut Seule les procédures stockées génèrent l'erreur !

Bonjour,
Je viens de réécrire le code de la procédure stockée en PHP et en SQL. Le voici :
Code :
1
2
$MyCMD = "SELECT * FROM maBase.Clients 
WHERE Ville='MONTAUROUX'";		print_r($this->cx['bx_prod']->query($MyCMD)->fetchAll(PDO::FETCH_ASSOC));
De la même manière, si j'utilise un INSERT cela fonctionne en PHP/SQL et pas avec une procédure stockée où l'enregistrement se fait bien mais 'éèà' devient un truc illisible dans le champ de la table :
Code :
1
2
3
4
$MyCMD  = "INSERT INTO Clients
(A, B, C, Titre, Nom, Prenom, CAttc, somcommandes, Solde, ad1, ad2, cp, Ville, Tel1, Tel2, Tel3, Fax, Port1, Port2, email1, email2, agas, professions)
VALUES('65','66','67','Mule','ABCDE','Açèéùà€','100','100','0','990Fondurane','lecoup','83440','Montauroux','1','1','1','1','1','1','jean-louis@bob.net','1','popol','po')";
RETURN $this->cx['bx_prod']->exec($MyCMD);
Ce code ne génère aucune erreur et renvoie les bonnes informations.
J'ai fait le même test avec d'autres procédures stockées : même résultat !
Je pense que cela devrait nous aider à trouver une piste.
Merci d'avance !
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 18h42   #3
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 853
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

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

Informations forums :
Inscription : avril 2011
Messages : 853
Points : 1 332
Points : 1 332
salut,

tu as essayé de générer des requêtes en iso aussi au lieu d'utf pour le client?
tu peux le configurer lors de ta connexion
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 08h56   #4
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Merci !
Toutefois, je ne comprends pas ta réponse. Pourrais-tu me guider ?
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 09h55   #5
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Je viens de faire les tests suivants - avec toujours la même erreur, si cela peut donner une piste :
Code :
1
2
3
4
5
6
7
8
9
10
DELIMITER //
DROP PROCEDURE IF EXISTS `base`.`cli`//
CREATE PROCEDURE `base`.`cli`(IN p_id MEDIUMINT)
BEGIN
  DECLARE v_id MEDIUMINT;
  SET v_id = p_id ;
  SELECT * FROM `base`.`cli`
  WHERE `idClients`=CONVERT(p_id USING latin1) collate latin1_swedish_ci;
END//
DELIMITER ;
L'erreur :
Citation:
Warning: PDO::query() [pdo.query]: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '=' in
PUIS :
Code :
1
2
3
4
5
6
7
8
9
DELIMITER //
DROP PROCEDURE IF EXISTS `base`.`cli`//
CREATE PROCEDURE `base`.`cli`(IN p_id MEDIUMINT)
BEGIN
  DECLARE v_id MEDIUMINT;
  SET v_id = p_id ;
  SELECT * FROM `base`.`cli`
  WHERE `idClients`=CONVERT(p_id USING latin1) collate latin1_general_ci;
END//
L'erreur :
Citation:
Warning: PDO::query() [pdo.query]: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '='
C'est à pleurer !
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 13h41   #6
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 853
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

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

Informations forums :
Inscription : avril 2011
Messages : 853
Points : 1 332
Points : 1 332
dans la liste de tes charset, tu as encore utf8 pour 2 des configs (client et result) et la collation serveur encore en swedish

à savoir que la plupart de ces réglages sont accessibles via des set
Code sql :
@@nom_variable=...;
ça permet de changer certains paramètres serveur uniquement pour la connexion en cours (ça n'affecte que l'échange lié au processus courant)

regarde dans la doc pour trouver les noms des variables...

par contre, vérifie si tu as pas une pauvre table qui aurait pas les mêmes charset et collation que les autres
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 14h51   #7
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Merci !
Et effectivement j'avais une table miniature dont un champ était en swedish
Il n'explique pas tout. Ta solution me semble des plus intéressante.
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h02   #8
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 853
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

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

Informations forums :
Inscription : avril 2011
Messages : 853
Points : 1 332
Points : 1 332
je ne joue plus qu'en utf8 perso... beaucoup plus simple et ouvert même si ça prend plus de place...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h45   #9
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Oui, j'ai essayé aussi.
Mais mon code PHP est truffé de : .
Bref, il paraît qu'il faut revoir toutes les fonctions sur les chaines...
Ce sera donc pour plus tard
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h25.


 
 
 
 
Partenaires

Hébergement Web