2010-11-27 3 views
1

J'utilise l'encodage UTF-8 sur mon site web. Dernièrement, j'ai stocké des noms chinois/espagnol/russe dans mes tables MySQL et je les ai ensuite imprimés avec PHP sur une page générée avec un jeu de caractères de l'UTF-8. La page fonctionne bien et je vois toutes les lettres correctement. Cependant, je viens de réaliser que ma table est définie avec le jeu de caractères latin1_swedish_ci. Comment est-il possible que même si j'ai stocké ces noms avec charset latin1_swedish_ci, les servir sur mon site avec UTF-8 les montre encore correctement?Latin1_swedish_ci Encoder dans MySQL

Merci!

Joel

Répondre

2

Parce que la connexion MySQL utilise toujours latin1,
vous devez traiter ces données est en UTF-8, mais magasin dans un environnement latin1.

Donc, pour le prouver,

show variables like '%char%'; 

ci-dessus devrait retourner la plupart du paramètre est en latin1

appliquent

set names utf8; 

Et vous verriez tous les UTF-8 devenir double codé (brouillé)

1

Vous pourriez être intéressé par le sujet de discussion: A script to change all tables and fields to the utf-8-bin collation in MYSQL

Ils traitent là avec des moyens de réparer les mêmes choses que vous avez faites.

Notez que lorsqu'elle est utilisée dans les clés primaires, la taille de varchar encodée dans utf8 compte triple, de sorte que la longueur maximale de la colonne de clé primaire unique est varchar (333).