Mysql
 sql >> Base de données >  >> RDS >> Mysql

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

Collation 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 de la base de données uniquement, vous n'avez donc pas à le définir pour chaque table séparément. Le jeu de caractères est hérité de DB aux tables aux colonnes. Utilisez utf8 comme jeu de caractères.

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

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

Cela devrait suffire.

Si vous voulez avoir un tri correct des chaînes espagnoles, définissez collation pour toute la base de données. utf8_spanish_ci devrait fonctionner (ci signifie insensible à la casse ). Sans 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 erronée auparavant. Vous devez d'abord le vérifier à l'aide d'un client de base de données 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 jeu de caractères travailler dans une base de données

  • objets avoir un jeu de caractères attribut, 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

  • connexion client a aussi un jeu de caractères attribut et il 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 en utf8 , mais connexion client défini sur latin1 , la base de données cassera les données, car elle essaiera de convertir utf8 comme si c'était latin1 .