create table check2(f1 varchar(20),f2 varchar(20));
erstellt eine Tabelle mit der Standardkollatierung latin1_general_ci
;
alter table check2 collate latin1_general_cs;
show full columns from check2;
zeigt die individuelle Zusammenstellung der Spalten als 'latin1_general_ci'.
Was bewirkt dann der Befehl alter table?
Antworten:
So ändern Sie den Standardzeichensatz und die Sortierung einer Tabelle einschließlich der vorhandenen Spalten (beachten Sie die Konvertierungsklausel ):
Die Antwort wurde dank der Aufforderung einiger Kommentare bearbeitet:
und
quelle
utf8_bin
ist besser, nicht wahr? Was ist der Unterschied zwischenutf8_bin
undutf8_unicode_ci
?utf8_bin
Groß- und Kleinschreibung unterschieden wird und zwischenutf8_unicode_ci
Groß- und Kleinschreibung nicht unterschieden wird. Eines ist nicht unbedingt besser als das andere - verwenden Sie alles, was Ihren Bedürfnissen entspricht.utf8
. Es ist fast nie das, was Sie wollen, und führt oft zu unerwarteten Problemen. Derutf8
Zeichensatz ist nicht vollständig mit UTF-8 kompatibel. Derutf8mb4
Zeichensatz ist genau das, was Sie wollen, wenn Sie UTF-8 wollen.MySQL verfügt über 4 Sortierstufen: Server, Datenbank, Tabelle, Spalte. Wenn Sie die Sortierung des Servers, der Datenbank oder der Tabelle ändern, ändern Sie nicht die Einstellung für jede Spalte, sondern die Standardkollatierungen.
Wenn Sie beispielsweise die Standardkollatierung einer Datenbank ändern, verwendet jede neue Tabelle, die Sie in dieser Datenbank erstellen, diese Kollatierung. Wenn Sie die Standardkollatierung einer Tabelle ändern, erhält jede Spalte, die Sie in dieser Tabelle erstellen, diese Kollatierung.
quelle
show variables like "collation%";
, also ist insgesamt SIX .Es legt die Standardkollatierung für die Tabelle fest. Wenn Sie eine neue Spalte erstellen, sollte diese mit latin_general_ci sortiert werden - denke ich. Geben Sie die Sortierung für die einzelne Spalte an und prüfen Sie, ob dies funktioniert. MySQL hat ein wirklich bizarres Verhalten in Bezug auf die Art und Weise, wie es damit umgeht.
quelle
Möglicherweise muss die Tabelle SCHEMA nicht nur geändert werden
(mariaDB 10)
quelle
<database name>
statt<table name>
utf8
, aberutf8mb4
.