Aller au contenu

Accents dans base de données MySQL


Sujets conseillés

Posté

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.

Posté

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

Posté

Pas forcement, souvent la requête

SET NAMES 'utf8'

suffit amplement

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

Posté

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);

Posté

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

Posté

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.

Posté

Alors comment on devrait les stocker?

Posté (modifié)

Tu les stockes tels quels, sans aucune transformation.

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

Modifié par Ernestine
Posté

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

Posté

Je croyais que c'etais bon??

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

Posté

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.

Posté (modifié)

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 ? ;)

Modifié par Ernestine
Posté

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

Posté
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.

Posté

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

Posté

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!

Posté

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,

Posté

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é

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...