Je vois souvent quelque chose de similaire ci-dessous dans les scripts PHP utilisant MySQL
query("SET NAMES utf8");
Je n'ai encore jamais eu à faire cela pour aucun projet, alors j'ai quelques questions de base à ce sujet.
- Est-ce quelque chose qui se fait uniquement avec PDO?
- Si ce n'est pas une chose spécifique à une AOP, quel est le but de le faire? Je me rends compte que c'est le réglage de l'encodage pour mysql mais je veux dire, je n'ai jamais eu à l'utiliser, alors pourquoi voudrais-je l'utiliser?
Réponses:
Il est nécessaire chaque fois que vous souhaitez envoyer des données au serveur ayant des caractères qui ne peuvent pas être représentés en ASCII pur, comme «ñ» ou «ö».
Que si l'instance MySQL n'est pas configurée pour s'attendre à un encodage UTF-8 par défaut à partir des connexions client (beaucoup le sont, en fonction de votre emplacement et de votre plate-forme.)
Lisez http://www.joelonsoftware.com/articles/Unicode.html au cas où vous ne sauriez pas comment fonctionne Unicode.
Lisez S'il faut utiliser "SET NAMES" pour voir les alternatives de SET NAMES et de quoi il s'agit exactement.
la source
SET NAMES UTF8
pour eux?SELECT
instruction.À partir du manuel :
De manière plus élaborée, (et encore une fois, gratuitement retirée du manuel ):
la source
Obtenir le bon encodage est vraiment délicat - il y a trop de couches:
La commande SQL "SET CHARSET utf8" de PHP garantira que le côté client (PHP) obtiendra les données dans utf8, peu importe comment elles sont stockées dans la base de données. Bien sûr, ils doivent d'abord être stockés correctement.
Définition DDL vs données réelles
L'encodage défini pour une table / colonne ne signifie pas vraiment que les données sont dans cet encodage. Si vous aviez une table définie comme
utf8
mais stockée sous un encodage différent, MySQL les traitera commeutf8
et vous avez des problèmes. Ce qui signifie que vous devez d'abord résoudre ce problème.Que vérifier
Vous devez vérifier le codage du flux de données à chaque couche.
Assurez-vous qu'il y a le bon partout.
Conversion
Si vous recevez des données par exemple
windows-1250
, et que vous souhaitez stockerutf-8
, utilisez ce SQL avant de stocker:Si vous avez des données dans la base de données
windows-1250
et que vous souhaitez les récupérerutf8
, utilisez:Quelques notes de plus:
la source
Cette requête doit être écrite avant la requête qui crée ou met à jour des données dans la base de données, cette requête ressemble à:
Notez que vous devez écrire l'encodage que vous utilisez dans l'en-tête, par exemple si vous utilisez utf-8, vous l'ajoutez comme ceci dans l'en-tête ou cela causera un problème avec Internet Explorer
donc votre page ressemble à ceci
la source
La solution est
la source
Au lieu de le faire via une requête SQL, utilisez la fonction php: mysqli :: set_charset mysqli_set_charset
depuis http://www.php.net/manual/en/mysqli.set-charset.php
la source
Merci a tous!
ne pas utiliser: query ("SET NAMES utf8"); il s'agit de trucs de configuration et non d'une requête. mettez-le juste après un début de connexion avec setCharset () (ou une méthode similaire)
une petite chose en parctice:
statut:
Stocker et lire les données ne pose aucun problème tant que mysql peut gérer les caractères. si vous regardez dans la base de données, vous verrez déjà qu'il y a de la merde dedans (par exemple en utilisant phpmyadmin).
jusqu'à présent, ce n'est pas un problème! (faux mais fonctionne souvent (en Europe)) ..
..à moins qu'un autre client / programme ou une bibliothèque modifiée, qui fonctionne correctement, lira / enregistrera les données. alors vous avez de gros ennuis!
la source
Pas seulement AOP. Si sql répond comme '????' symboles, prédéfini de votre jeu de caractères (espérons UTF-8) vraiment recommandé:
ou via le style de procédure
mysqli_set_charset($db,"utf8")
la source