comment gérer les accents et les caractères étranges dans une base de données?


2one2

J'essaie de sécuriser les mots espagnols avec un accent dans ma base de données mais cela ne fonctionnera pas, j'ai déjà essayé:

1) changer la conllation des tableaux et des lignes en utf8_spanish_cietutf_unicode_ci.

2) ajouter une balise d'en-tête avec

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

3) ajout

header("Content-Type: text/html;charset=utf-8");

dans une balise php.

faire cela dans un serveur xampp de mon ordinateur portable fonctionnera, mais lorsque je télécharge la base de données sur un serveur monstre de connexion, cela ne sauvera pas l'accent correctement.

edit: c'est la connexion que j'utilise:

    private function Connect()
    {
        //$this->settings = parse_ini_file("settings.ini.php");
        try 
        {
            # Read settings from INI file, set UTF8
            $this->pdo = new PDO('mysql:host=localhost;dbname=xxxxx;charset=utf8', 'xxxxx', 'xxxxxx', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

            # We can now log any exceptions on Fatal error. 
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            # Disable emulation of prepared statements, use REAL prepared statements instead.
            $this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

            # Connection succeeded, set the boolean to true.
            $this->bConnected = true;
        }
        catch (PDOException $e) 
        {
            # Write into log
            echo $this->ExceptionLog($e->getMessage());
            die();
        }
    }

Éditer:

Je ne peux pas enregistrer l'accent, ça se voit comme des personnages étranges comme á = á

David Ferenczy Rogožan

Le classement affecte uniquement le tri du texte, il n'a aucun effet sur le jeu de caractères réel des données stockées.

Je recommanderais cette configuration:

  1. Définissez le jeu de caractères pour l'ensemble du DB uniquement, vous n'avez donc pas à le définir séparément pour chaque table. Le jeu de caractères est hérité du DB vers les tables vers les colonnes. Utiliser utf8comme jeu de caractères.

  2. Définissez le jeu de caractères pour la connexion DB . Exécutez ces requêtes après vous être connecté à la base de données:

    SET CHARACTER SET 'utf8'
    SET NAMES 'utf8'
    
  3. Définissez le jeu de caractères de la page à l' aide de l'en-tête HTTP et / ou de la balise méta HTML. L'un d'eux suffit. Utilisez utf-8comme le charset.

Cela devrait suffire.

Si vous souhaitez un tri approprié des chaînes espagnoles, définissez le classement pour toute la base de données. utf8_spanish_cidevrait fonctionner ( cisignifie insensible à la casse ). Sans un classement approprié, les caractères espagnols accentués seraient toujours triés en dernier.

Remarque : il est possible que le jeu de caractères des données que vous avez déjà dans une table soit cassé, car la configuration de votre jeu de caractères était incorrecte auparavant. Vous devez d'abord le vérifier en utilisant un client DB pour exclure ce cas. S'il est cassé, réinsérez simplement vos données avec la bonne configuration de jeu de caractères.

Comment fonctionne le jeu de caractères dans une base de données

  • les objets ont unattribut de jeu de caractères , qui peut être défini explicitement ou hérité (serveur> base de données> table> colonne), donc la meilleure option est de le définir pour toute la base de données

  • la connexion client a également unattribut de jeu de caractères et indique à la base de données dans quel encodage vous envoyez les données

Si les jeux de caractères de la connexion client et de l'objet cible sont différents, les données que vous envoyez à la base de données sont automatiquement converties du jeu de caractères de la connexion au jeu de caractères de l'objet.

Donc, si vous avez par exemple les données dans utf8, mais que la connexion client est définie sur latin1, la base de données cassera les données, car elle essaiera de convertir utf8comme elle latin1.

Articles connexes