J'essaie de stocker une liste de pays dans une base de données mySQL.Quel collation dois-je utiliser pour stocker ces noms de pays dans MySQL?
Je rencontre des problèmes de stockage des noms (non anglais) comme ceux-ci:
- São Tomé et Príncipe
- República de El Salvador
Ils sont stockés avec des personnages étranges dans le db, (et donc sortie étrangement dans mes pages HTML).
J'ai essayé d'utiliser différentes combinaisons de la base de données pour les classements et la collecte de connexion MySQL:
Le réglage « évident » utf8_unicode_ci devait utiliser tant pour le databse et les informations de connexion. À ma grande surprise, cela n'a pas résolu le problème.
Est-ce que quelqu'un sait comment résoudre ce problème?
[Modifier]
Il se trouve que le problème est de ne pas faire avec collation, mais le codage, comme l'a fait par le col. Je remarque que la ligne de commande, je peux taper deux commandes séparées:
SET NAMES utf8
followed by
[QUERY]
où [QUERY] est mon requête SQL pour récupérer les noms, et qui fonctionne (les noms ne sont plus mutilée). Cependant, lorsque je fais la même chose par programmation (c'est-à-dire par code), je reçois toujours les noms mutilés. J'ai essayé de combiner les deux déclarations comme ceci:
SET NAMES utf8; [QUERY]
à la ligne de commande, encore une fois, ce sont retournés les chaînes correctes. Encore une fois, lorsque j'ai essayé les mêmes déclarations à l'aide du code, j'ai eu de fausses valeurs.
C'est un extrait de ce que mon code ressemble à:
$mysqli = self::get_db_connection();
$mysqli->query('SET NAMES utf8');
$sql = 'SELECT id, name FROM country';
$results = self::fetch($sql);
the fetch method is:
private static function fetch($query)
{
$rows = array();
if (!empty($query))
{
$mysqli = self::get_db_connection();
if ($mysqli->connect_errno)
{
self::logError($mysqli->connect_error);
}
else
{
if ($result = $mysqli->query($query))
{
if(is_object($result)){
while ($row = $result->fetch_array(MYSQLI_ASSOC))
$rows[] = $row;
$result->close();
}
}
}
}
return $rows;
}
Quelqu'un peut-il repérer ce que je peux être en train de faire des thats mal?
Juste pour clarifier, les en-têtes HTTP dans la page sont réglés correctement 'Content-type': 'text/html; charset = utf-8 '
donc ce n'est pas le problème ici.
êtes-vous sûr qu'il didn pas résoudre le problème? Avez-vous vérifié que votre entrée était encodée correctement? – aioobe