Jump to content
Sign in to follow this  
JoP

Accents dans base de données MySQL

Rate this topic

Recommended Posts

Bonjour à tous,

Je travaille avec une base de données MySQL et j'ai un problème au niveau des accents. Dans ma bse de données, les accents ne s'enregistrent pas comme il faut. Par exemple, "à" devient "Ã". Le classement de ma base de données est utf8_general_ci.. et je ne sais pas trop comment régler ce problème. Est-ce que je dois modifier le classement de ma base de données ou bien je dois utiliser une fonction PHP qui me permettra de modifier mes caractères spéciaux (exemple "à" -> "à") et une autre fonction pour les remodifier (pour créer un RSS, qui ne supporte pas "à") par la suite.

Merci à tous!

Jonathan P.

Share this post


Link to post
Share on other sites

Formate tes caractères avant l'insertion c'est toujours mieux.

Share this post


Link to post
Share on other sites

Pas forcement, souvent la requête

SET NAMES 'utf8'

suffit amplement

Share this post


Link to post
Share on other sites

Pas forcement, souvent la requête

SET NAMES 'utf8'

suffit amplement

Merci, mais où est-ce que je dois placer cette requête?

Share this post


Link to post
Share on other sites

Juste après la connexion


$conn = mysql_connect("localhost", "username", "password") or die(sendError('Could not connect to DB'));
mysql_select_db("dbName");
mysql_query("SET NAMES 'utf8'", $conn);

Share this post


Link to post
Share on other sites

Merci beaucoup, j'ai revérifier quelques trucs, et j'ai aussi utilisé cette requête et tout fonctionne à merveille! Merci à vous!

Share this post


Link to post
Share on other sites

En tout cas, il ne faut surtout pas stocker les accents en entités html dans sa base de données. C'est trop galère après si tu dois utiliser ta base de données dans autre chose que ton site web.

Share this post


Link to post
Share on other sites

Alors comment on devrait les stocker?

Share this post


Link to post
Share on other sites

Tu les stockes tels quels, sans aucune transformation.

Par exemple un à, tu le stockes à (et surtout pas à)

Edited by Ernestine

Share this post


Link to post
Share on other sites

C'est tout justement le sujet de mon post, lorsque je stocke un à, dans la base de données, j'ai un Ã

Est-ce que je dois changer l'interclassement de ma base pour que ça fonctionne?? Et si oui, que dois-je mettre?

Merci

Share this post


Link to post
Share on other sites

Je croyais que c'etais bon??

Share this post


Link to post
Share on other sites

Je croyais que c'etais bon??

Oui, mais j'aime bien m'informer sur le sujet quand même, pour voir les options...

Share this post


Link to post
Share on other sites

Ernestine, il est quand même rare (ne vaut pas dire jamais) d'utiliser la bdd d'un site sur autre chose que le site web.

Share this post


Link to post
Share on other sites

Pas si rare que cela

Share this post


Link to post
Share on other sites

Ernestine, il est quand même rare (ne vaut pas dire jamais) d'utiliser la bdd d'un site sur autre chose que le site web.

C'est surtout une question de partage des rôles. La base de données constitue la couche la plus basse d'une application web, tandis que le rendu final à l'écran sera produit par les fonctions d'affichage, la couche la plus haute. C'est au moment de l'affichage qu'il faut s'occuper des entités html, et certainement pas au moment du stockage. Mysql est là pour stocker les données, les organiser, assurer l'intégrité référentielle, etc, et tout cela indépendamment de l'utilisation qui sera faite de ces données.

Et si demain on lui demande de générer un fichier excel à partir des données de sa base, il fait comment ? Il s'amuse à les décoder ? ;)

Edited by Ernestine

Share this post


Link to post
Share on other sites

Je procède aussi de la façon que tu a cité précédemment pour éviter toute complication.

C'est vrai qu'il n'est pas si rare que cela en faite :D

Share this post


Link to post
Share on other sites
Formate tes caractères avant l'insertion c'est toujours mieux.

Surtout pas !

Ernestine, petit-ourson et ceux qui vont dans leur sens sont dans le vrai. Je m'étend pas sur le sujet, c'est un fait : on ne stocke pas des entités html dans une base, les raisons sont multiples (export, migration ou tout simplement...logique).

Si ta base stocke des caractères foireux lors de l'enregistrement de ton formulaire, c'est simplement parce que ta page n'utilise pas le même encodage, ainsi ta requête http transmet des données encodées différement. Un attribut html de la balise form existe pour résoudre ce souci (je l'ai jamais utilisé, mais je gage que ça fonctionne : accept-charset http://www.w3.org/TR/html401/interact/forms.html#adef-accept-charset )

C'est une spec, donc elle devrait être implémentée par une majorité de navigateur pour palier à ton problème d'insertion. Le mieux étant d'utiliser le même encodage pour ta base et tes pages dans l'absolu (raison pour laquelle je n'ai jamais eu à utiliser ce tag).

Bonne chance ;)

PS, pour info : ces chaines "é", "î", "Ã" etc. sont affichées lorsque les caractères sont en utf8 et qu'elles sont interprétées comme de l'iso.

Share this post


Link to post
Share on other sites

SStephane, tu as mal interprété leurs propos, c'était de formater les textes en UTF8 qui était proposé la, mais le problème de stockage dans la bdd avec des caractères bizarre, c'est souvent parce que le serveur Mysql est par défaut en latin-1, et même si tu crée tes bases en UTF8 il exécute les requêtes en latin-1 et pour palier a cela la requettes set name for e l'exécution en UTF8 rien a voir avec un attribut html qui ne sert a rien si la page est déjà encodemé en utf8

Share this post


Link to post
Share on other sites

Donc, si je comprends bien, je devrais revérifier l'interclassement de ma base de données et de toutes mes tables pour vérifier qu'il soit bien le même??

Je crois que utf8 est un interclassement qui supporte pas mal tous les caractères; est-ce bien ça?

Merci encore à tous!

Share this post


Link to post
Share on other sites

Tu peux vérifier ce n'est pas perdu.

Tu as l'interclassement du serveur, mais souvent, celui la tu ne peux y toucher, surtout sur les mutualisés, puis l'interclassement sur les bases, puis sur les tables et enfin sur les champs de type texte,

Share this post


Link to post
Share on other sites

Et ne pas oublier que si tu fais une recherche plein texte dans ta BDD, avec les entités tu risques de ne pas tout retrouver. Par exemple tu recherches "coûté" alors que dans la base c'est écrit coûté

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...