web-dev-qa-db-fra.com

Comment changer le classement par défaut d'une table?

create table check2(f1 varchar(20),f2 varchar(20));

crée une table avec le classement par défaut latin1_general_ci;

alter table check2 collate latin1_general_cs;
show full columns from check2;

affiche le classement individuel des colonnes sous la forme 'latin1_general_ci'.

Alors quel est l'effet de la commande alter table?

174
dharm0us

Pour modifier le jeu de caractères et le classement par défaut d'une table , y compris ceux des colonnes existantes (notez la clause convert to):

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

Edité la réponse, grâce à la sollicitation de quelques commentaires:

Devrait éviter de recommander utf8. Ce n'est presque jamais ce que vous voulez, et cela entraîne souvent des dégâts inattendus. Le jeu de caractères utf8 n’est pas totalement compatible avec UTF-8. Le jeu de caractères utf8mb4 est ce que vous voulez si vous voulez UTF-8. - Rich Remer 28 mars 18 à 23:41

et

Cela semble assez important, je suis content d'avoir lu les commentaires et merci à @RichRemer. Nikki, je pense que vous devriez modifier cela dans votre réponse en considérant le nombre de vues que cela obtient. Voir ici https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html et ici Quelle est la différence entre les jeux de caractères utf8mb4 et utf8 dans MySQL? - Paulpro 12 mars à 17:46

565

MySQL a 4 niveaux de classement: serveur, base de données, table, colonne. Si vous modifiez le classement du serveur, de la base de données ou de la table, vous ne modifiez pas le paramètre pour chaque colonne, mais vous modifiez les classements par défaut.

Par exemple, si vous modifiez le classement par défaut d'une base de données, chaque nouvelle table créée dans cette base de données utilisera ce classement et si vous modifiez le classement par défaut d'une table, chaque colonne créée dans cette table obtiendra ce classement.

32
fredrik

Il définit le classement par défaut pour la table; Si vous créez une nouvelle colonne, vous devez l'associer à latin_general_ci - je pense. Essayez de spécifier le classement pour chaque colonne et voyez si cela fonctionne. MySQL a un comportement vraiment bizarre en ce qui concerne la façon dont il gère cela.

9
Don Werve

peut-être besoin de changer le tableau SCHEMA non seulement

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)

2
AssyK