2009-12-21 7 views
1

Lorsque le stockage de données dans MySQL en utilisant le jeu de caractères UTF8, est-il logique d'échapper à des caractères d'entité lorsque les données sont saisies ou est-il préférable de le stocker sous forme brute et le transformer lors du retrait?Stockage des données UTF8 dans MySQL

Par exemple, disons que quelqu'un entre dans un personnage balle (•) dans une zone de texte. Lors de l'enregistrement de ces données, doit-il être converti en • avant d'être entré? Ou aurait-il un sens d'entrer comme une balle, puis convertir en tirant?

Je suppose que je ne suis pas sûr sur les meilleures pratiques pour le stockage des données non-ascii. Toutes les pensées seraient grandement appréciées.

Répondre

6

Si vous utilisez le jeu de caractères UTF-8 pour l'ensemble de votre application, (c.-à-d. MySQL, mais aussi l'encodage de vos pages HTML, vos scripts, le code, et tout ce qui), il n'y a pas besoin de Tranform « caractères spéciaux » en entités: il suffit d'envoyer vos données texte en UTF-8 aussi ;-)

+0

Cela a vraiment du sens, en y réfléchissant de cette façon. – andrew

+0

C'est l'une des grandes choses à propos de l'UTF-8: moins de problèmes (enfin ... hu ... au moins quand vous avez terminé les réglages de tous vos applications et serveurs ^^) –

0

Le but de l'échappement est de transmettre des données sur un canal qui n'autorise pas certains caractères. Comme une base de données UTF-8 peut très bien gérer les caractères UTF-8, vous n'avez aucune raison d'échapper quoi que ce soit pour le stockage. En fait, comme le texte échappé est plus difficile à manipuler (les fonctions de chaîne ne fonctionneront pas correctement, par exemple), il est généralement conseillé de ne pas effectuer d'échappement inutile.

3

Stockez les données telles quelles. Effectuez les conversions nécessaires pour l'affichage lors de l'exécution.

Parce que si vous enregistrez au format HTML (avec des entités) vous créez plusieurs questions

  • Vous verrouillez vos données au format HTML, non seulement « le contenu du texte »
  • bousille largeurs de données (par exemple, varchar(255) ou de l'utilisation des fonctions de chaîne SQL comme substring() ou reverse())
  • Recherche contre ces caractères devient impossible sans convertir également l'entrée de recherche
+0

Toutes très bonnes raisons. Verrouiller les données en HTML est une bonne raison de ne pas le faire ... Je n'avais pas pris cela en compte. – andrew

0

Considérons que la base de données peut héberger des données pour plusieurs applications.

Dans cet environnement, la définition d'une chaîne dans la base de données est définie par la base de données, et non l'application. Rendre votre application conforme aux normes de données et rendre les conversions explicites dans votre couche de données. Par exemple, si la base de données est un schéma plus récent et que le DBA a défini que les chaînes seront stockées en UTF-8, toutes les chaînes transmises depuis votre application doivent être UTF-8. Toutefois, si la base de données est un système hérité et que la cible de vos données est un jeu de caractères de 8 bits, effectuez la conversion dans votre application vers la page de code appropriée et/ou échouez lorsque vous rencontrez une non-conformité. valeur.

La plupart des schémas de base de données plus récentes qui interagissent avec le Web devrait normaliser le format UTF-8 ou UTF-16. Si vous construisez la base de données, commencez par la localiser d'abord, puis, une fois que vous avez décidé des représentations de chaînes internes, forcez toutes les applications qui écrivent à se conformer à vos normes.