Différence entre charset et collation
Beaucoup d'utilisateurs de base de données ne comprennent pas bien ce que sont les jeux de caractères (que l'on appelle charset en anglais), et les interclassements (traduction de "collation").
Qu'est-ce qu'un jeu de caractères ?
Une base de données n'est pas capable d'enregistrer des caractères (lettres, chiffres et symboles) sur le disque dur. Sur le disque, on ne peut enregistrer que des octets (byte).
Alors pour enregistrer du texte (que l'on qualifie de chaine de caractères), il faut être capable de convertir le texte en suite d'octets. C'est cette opération que l'on nomme encodage.
Et figurez vous qu'il n'y a pas qu'une seule façon d'encoder les caractères, il y en a même des centaines, des centaines d'encodages différents. Vous en connaissez sans doute quelques-un comme Latin1 ou UTF-8.
Quel encodage choisir ?
Alors là tout dépend de votre utilisation. Si votre base de données ne va contenir que du texte en Français (et donc aucun caractère spécial comme des idéogrammes japonais ou chinois, ou encore de l'hébreu ou du cyrillique (russe)), alors vous pouvez vous contenter de l'encodage par défaut : latin1, avec lequel on peut encoder tous les caractères qu'on utilise en occident (Français, Anglais, Allemand, Espagnol...).
Dans le cas contraire, il faut choisir un encodage qui puisse mapper beaucoup plus de caractères. On appelle cela un encodage multibyte. N'y allons pas par quatre chemins, l'encodage multibyte le plus utilisé c'est l'UTF-8 !
Si vous voulez en savoir plus sur l'encodage et sur unicode, je vous recommande l'excellent billet de Joël Spolsky : The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets.
Qu'est-ce qu'un interclassement ?
Pour le coup, l'explication va être beaucoup plus simple que pour les jeux de caractères.
Allez donc jeter un oeil sur cette page : masquer une colonne dans excel.
Un interclassement est, comme son nom l'indique, un classement des caractères qui est utilisé par MySQL pour trier les données (quand vous utilisez un ORDER BY par exemple).
C'est pour ça que dans phpMyAdmin vous voyez pleins de valeurs possibles : utf8_bin, utf8_general_ci, latin1_swedish_ci...
Ainsi, l'inteclassement n'a aucune influence sur le stockage des données, juste sur leur ordonnancement.
Petite astuce : le suffixe _ci dans un interclassement signifie "case insensitive", cela veut dire que l'interclassement est insensible à la case (minuscules et majuscules).
Fini de lire cette page ? allez faire un tour ici : cité magique dans les nuages, ça peut vous intéresser.