2009-04-12 6 views
138
create table check2(f1 varchar(20),f2 varchar(20)); 

crée une table avec le classement par défaut latin1_general_ci;Comment changer le classement par défaut d'une table?

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

montre le classement individuel des colonnes en tant que 'latin1_general_ci'.

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

+0

double possible (http://stackoverflow.com/questions/5906585/change-database-collation) [Changer le classement de base de données] –

+0

Vous pouvez modifier la réponse que moi-même et beaucoup d'autres semblent être d'accord que le 2e est le bon. –

+1

@GregMiernicki fait. – dharm0us

Répondre

485

Pour modifier le jeu de caractères par défaut et la collation d'une table y compris celles des colonnes existantes (notez la se convertir à clause):

alter table <some_table> convert to character set utf8 collate utf8_unicode_ci; 
+24

Exactement ce que je cherchais, merci. Les autres réponses expliquent le problème, mais celui-ci a la solution. – Pablo

+3

Je suis d'accord. C'est vraiment ce que ma recherche était pour. – James

+0

qu'en est-il de la vue? Je dois changer pour View .. –

9

Il définit le classement par défaut pour la table; si vous créez une nouvelle colonne, cela devrait être assemblé avec latin_general_ci - je pense. Essayez de spécifier le classement pour la colonne individuelle et voir si cela fonctionne. MySQL a un comportement vraiment bizarre en ce qui concerne la façon dont il gère cela.

+32

Faites défiler vers le bas pour résoudre le problème – Moak

29

MySQL a 4 niveaux de collation: 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 que vous créez 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. .

+4

En fait, MySQL a ** FIVE ** Niveaux de classement, il existe un paramètre de classement par défaut de niveau de jeu de caractères que beaucoup de gens oublient. – Devy

+2

Il y a aussi l'assemblage de connexions 'show variables like" collation% ";', donc total est *** SIX ***. –

0

peut être nécessaire de changer le SCHEMA non seulement la table

ALTER SCHEMA <table name> JEU DE CARACTÈRES PAR DÉFAUT utf8 COLLECTEUR PAR DÉFAUT utf8_general_ci;

(MariaDB 10)

+0

'' au lieu de '

' – dnivog