Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 19/07/2011, 10h59   #1
Membre du Club
 
Homme nicolas
Développeur informatique
Inscription : février 2011
Messages : 111
Détails du profil
Informations personnelles :
Nom : Homme nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2011
Messages : 111
Points : 52
Points : 52
Par défaut problème d'accent mais pas seulement

Bonjour,

si je vous écris c'est parce que je suis face à un bug que j'ai du mal à comprendre...

Je dispose de deux bases de données distinctes mais identiques (copie du script de création de tables, serveur apache, phpmyadmin, configurer à l'identique.

Je souhaite copier des informations d'une table à une autre.

Dans ma solution, je fais un select sur une table de ma base 1, puis je fais un insert pour chaque ligne dans ma base 2.

L'erreur se produit lorsqu'une ligne comporte un accent... mais je ne vois pas du tout pourquoi, car, l'encodage est ok, dans la base 1, les accents sont bien visibles, quand je fais un affichage de la requete j'obtiens bien l'accent et une requete correcte...

Le pire étant que lorsque je copie cette requete qui me renvoie une erreur via le programme java passe très bien si je la copie dans phpmyadmin (même avec un problème d'encodage, les quottes devraient tout de même permettre l'ajout à la base, même si les accents passent mal)

Voici l'erreur soulevée par java :
java.SWLException : Syntax error or access violation, message from server :"You have an error in your SQL syntax

Si vous avez une solution... je comprend pas pourquoi sql n'en veut pas via java mais accepte via phpmyadmin...

Merci d'avance
dumoulex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h26   #2
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Bonjour,

Peut on avoir la requête stp? et le bout de code java tant qu'on y est
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h45   #3
Membre du Club
 
Homme nicolas
Développeur informatique
Inscription : février 2011
Messages : 111
Détails du profil
Informations personnelles :
Nom : Homme nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2011
Messages : 111
Points : 52
Points : 52
hey
alors voici le code java :

listeUser est une arraylist qui contient des instances d'Utilisateur avec nom/prenom...
Code :
1
2
3
4
5
6
 
int size = listeUser.size();
FOR (int s=0 ; s<size ; s++){
	Utilisateur util = listeUser.get(s);
	util.INSERT(0);
}
dans ma fonction insert :

Code :
1
2
3
4
5
6
7
8
9
 
public void INSERT(int a) throws SQLException {
	String strSql = "";
	strSql = "INSERT INTO Utilisateur(idUtilisateur, nomUtilisateur, loginUtilisateur, passwordUtilisateur, emailUtilisateur, telUtilisateur, IPUtilisateur) " +
		"VALUES (\"" + this.id + "\" , \"" + this.nom + "\", \"" + this.login + "\" , \"" +this.pwd+"\" , \"" +this.mail+ "\" , \"" +this.tel+ "\" , \"" +this.IP+ "\" )";
 
	System.out.println("sql : " + strSql);
	JDBCRequete.INSERT(BASE, strSql);
}
ce qui est appelé avec JDBCRequete.insert, c'est tout simplement :

Code :
1
2
3
 
stmt = (Statement) conn.createStatement();
stmt.executeUpdate(sql);
voici le resultat du System.out.println() juste avant l'execution :

INSERT INTO Utilisateur(idUtilisateur, nomUtilisateur,
loginUtilisateur, passwordUtilisateur, emailUtilisateur,
telUtilisateur, IPUtilisateur)
VALUES ("5" , "Hervé Ana******ard",
"herve" , "4f6e***********76597c6d4a12b3230" ,
"ha*****rd@k****.com" , "0381*****" , "192.168.****" )

Si j'enlève l'accent, ça marche. si je copie cette requete dans phpmyadmin, ça marche aussi ...
dumoulex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h49   #4
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
As tu essayé de remplacer les "é" par &eacute;?

Ensuite les \" peuvent être remplacés par des simple cote '.
Ceci ne changera rien mais je trouve ca plus lisible ^^
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h54   #5
Membre du Club
 
Homme nicolas
Développeur informatique
Inscription : février 2011
Messages : 111
Détails du profil
Informations personnelles :
Nom : Homme nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2011
Messages : 111
Points : 52
Points : 52
Étant donné que je ne cherche pas à faire du web mais une application java, le eacute ne me sert pas à grand chose !

si mon affichage se faisait sur navigateur web je suis d'accord, mais là ça ne me sert pas vraiment. Sinon je suis obligé de repéré tous les accents avant l'insertion et à chaque select pour repérer les caractères accentués et les remplacés.

Je sèche complètement, la requête refuse de s'executer... j'aurais encore compris si mysql avait remplacé le ' é ' par un ' ? ' ou un caractère ascii pour préciser l'erreur d'encodage mais la ça bloque alors que les quotes sont la...
dumoulex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 11h58   #6
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Rien à voir avec le HTML mais plutot avec l'encodage.
Pour information, il existe des bibliothèques pour gérer les accents si l'encodage de la base de données ne les accepte pas!

Exemple:

Code :
1
2
3
4
5
6
7
8
9
10
11
 
import org.apache.commons.lang.StringEscapeUtils;
 
public class Exemple{
    public static void main(String[] args)
    {
        String  init = "El&eacute;phant";
        String res = StringEscapeUtils.unescapeHtml(init);
        System.out.println(res);
    }
}
Ceci étant, il est vrai qu'il est plus évidant d'enregistrer directement l'accent et de ne pas utiliser ces bibliothèques si on ne fait pas de web mais la c'e=était pour vérifier le problème d'encodage.
Sinon, en quoi est encodé ta base de données?
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h46   #7
Membre du Club
 
Homme nicolas
Développeur informatique
Inscription : février 2011
Messages : 111
Détails du profil
Informations personnelles :
Nom : Homme nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2011
Messages : 111
Points : 52
Points : 52
tous mes champs de la table sont en latin1, pour les deux bases.

En faisant la commande :
show variables like 'char%';

j'ai exactement la même chose sur les deux bases :
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

et via phpmyadmin, tous les champs sont notés en latin1

le pire... c'est que, pour des tests, j'ai une autre machine qui est censé pouvoir aire tourner l'application java. Elle possède donc également une base locale copiée collée qui est strictement la même que les deux précédentes. et bien entendu, lorsque je fais la requête via java sur cette machine, tout va bien...

J'ai donc une machine debian avec mysql qui refuse d'accepter les requêtes pouvant contenir un accent et une machine ubuntu sur laquelle ça marche...
dumoulex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 10h01   #8
Membre du Club
 
Homme nicolas
Développeur informatique
Inscription : février 2011
Messages : 111
Détails du profil
Informations personnelles :
Nom : Homme nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2011
Messages : 111
Points : 52
Points : 52
bonjour,

J'ai quelques précisions qui font avancer la chose mais ne la corrige pas encore...

je me suis aperçu que mon erreur n'apparaissait que lorsque je lançais l'application depuis le jar. En passant par eclipse tout va bien.

Je suppose donc que l'encodage est bien en cause, mais reste à savoir pourquoi...

J'ai testé de passer l'encodage d'eclipse en utf8, comme le SE et effectivement, j'obtiens la même erreur depuis edipse.

j'ai donc un gros problème de conversion entre le java qui est en utf8 et ma base de données, pourtant je ne vois pas pourquoi elle n'arrive pas à convertir utf-8 <-> latin1 et de plus, en testant les champs de la base avec les encodage utf8_bin ou utf8_general, j'ai toujours le même problème...

Quelqu'un sait il comment cela se fait-il ?
dumoulex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 10h33   #9
Membre du Club
 
Homme nicolas
Développeur informatique
Inscription : février 2011
Messages : 111
Détails du profil
Informations personnelles :
Nom : Homme nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2011
Messages : 111
Points : 52
Points : 52
bon, j'ai trouvé une solution mais elle ne me plait guère...

au lancement :
java -Dfile.encoding=latin1 -jar IHM.jar

si quelqu'un comprend pourquoi même en utf8 la base refuse mes requêtes je suis preneur !
dumoulex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 10h33   #10
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
C'est donc plus un problème du côté Eclipse - Java.

Je te propose d'ouvrir une discussion sur le forum eclipse ou java dans ce cas. Tu auras surement plus de réponse
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h23.


 
 
 
 
Partenaires

Hébergement Web