Wie kann ich festlegen, Sortierung beim erstellen einer Tabelle aus select in mysql?
Beim erstellen einer Tabelle mit dynamisch erstellt und definiert Spalten von einer select-Ergebnis, wie kann ich die Sortierung angeben, wie Sie beim anlegen einer Tabelle mit den Spalten-Definitionen?
d.h.
CREATE TABLE IF NOT EXISTS my_table (
SELECT * FROM (
SELECT ....
) )
Oben erstellt die Tabelle mit den dynamischen Spalten Prima, aber es ist nicht die Sortierung, die ich möchte. Es ist mit utf8_general_ci und ich will, dass es utf8_unicode_ci.
Unten funktioniert nicht
CREATE TABLE IF NOT EXISTS my_table (
SELECT * FROM (
SELECT ....
) ) DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;
es gibt Fehler Meldung angezeigt, die Befehle werden nicht gültig, die auf dieser position.
Ich merke, der Vorschlag ist nicht gültig, also welche Methode zur Erreichung dieser Ziele ist? Ich habe versucht Einstellung der Datenbank-collation denken, das war Vorgabe für die Datenbank für alle Tabellen erstellt, aber es scheint nicht zu Verhalten wie die - oder
vielleicht bin ich nicht eigentlich die Standard-Einstellung für die Datenbank, wenn ich ALTER
die Datenbank-Sortierung. Gibt es eine Möglichkeit zum festlegen einer Standardeinstellung für Tabellen, so dass Sie den ersten code-block oben erstellt die Tabelle mit der gewünschten Sortierung?
Den SELECT...
Ergebnisse in der obigen code-Blöcke bezieht sich auf eine Vielzahl von bedingten und/oder logischen Wert-Einstellung mit case/when
Aussagen, die Zeichenfolge analysieren, und die Funktion liefert das Ergebnis - es ist nicht nur die Auswahl von Spalten eins-zu-eins aus einer anderen Tabelle mit definierten Spalten, ist also nicht so einfach wie die Definition der anderen Tabelle die Spalten.
Ich habe bereits versucht die Einstellung der Datenbank-Sortierung vor der Verwendung von ALTER DATABASE my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci
aber dies ändert nichts an den Ergebnissen. Die Tabellen werden noch erstellt (und die Spalten in den Tabellen) mit utf8_general_ci
beim erstellen einer Tabelle aus einem select (dynamisch definierten Spalten aus der select-Ergebnisse)
- Die Dokumentation auf
CREATE TABLE
, beschreibt ein paar Möglichkeiten, das zu tun diese Art der Sache, aber keiner von Ihnen entsprechen Ihren Erwartungen im zweiten Fall. - Richtig, das ist, warum ich bin mit der Frage hier(?) Sofern ich die zweite code-block oben nur als Anregung, was ich arbeiten möchte, aber ich merke, dass es nicht richtig ist. Ich bin auf der Suche für das, was wäre die richtige Lösung. Die Dokumentation bezieht sich auf die Tatsache, dass Sie können erstellen Sie eine Tabelle aus einer select-Tisch-Optionen für die Sortierung existieren, aber ich kann nicht finden, Beispiele, die zeigen, dass diese beiden zusammen. Die
SELECT ....
von oben ist eine Sammlung von Ergebnissen erstellt, die verschiedene Logik wiecase when
Ausdrücke, andere Tabellen, und Ergebnisse von Funktionen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das fehlschlägt, dann
... Oder
Noch ein anderer Ansatz ist, um sicherzustellen, dass die
DATABASE
hat dieDEFAULT CHARACTER SET
- und/oderDEFAULT COLLATION
gewünscht, bevor dieCREATE TABLE ...
.Was auch immer Sie tun, Folgen Sie es mit
um sicherzustellen, dass jede Spalte hat die gewünschte
CHARACTER SET
undCOLLATION
. Wenn Sie fehlt, von der Spalte, dann schauen Sie in die Tabelle dieDEFAULTs
.Beispiel
Beachten Sie die explizite
CHARACTER SET
undCOLLATE
auf einige Spalten, wodurch das überschreiben derDEFAULT CHARSET
der Tabelle.Wenn es keine Sortierung
CHARSET utf8
standardmäßigCOLLATE utf8_general_ci
.Beispiel 2
In diesem erstelle ich eine neue Tabelle
us2
aus dieser Tabelle, aber ändern Sie die Sortierung dercity
:Alles über
us2
wird die gleiche sein, wie fürus
außer für die Sortierung dieser Spalte.collation_database
im mysql-client während der Verwendung der Datenbank in Frage, sagt es mirutf8_unicode_ci
jedoch, wenn die Tabelle erstellt wird, wie im ersten Beispiel in meinem post, wird es erstellt, wieutf8_general_ci
. Gibt es eine andere Methode zur überprüfung/Einstellung die Standard für die andere Datenbank alsALTER DATABASE db_name CHARACTER SET charset COLLATE collation;
Ist die Datenbank-Optionen vs die default-Optionen für den db anders?DEFAULT
wenn mit der alter database-Befehl:ALTER DATABASE my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci
und tut es immer noch nicht ändern, die Ergebnisse, die ich sehe. Ich bekomme immer noch Tabellen, die erstellt werden, die von einer select mitutf8_general_ci
SHOW CREATE DATABASE dbname;
CHARACTER SET utf8
ohne Angabe einer Sortierung gibt Ihnen die Standard -utf8_general_ci
.DEFAULT
ist impliziert in diesem Kontext.utf8_unicode_ci
. Ich kann nicht scheinen, um herauszufinden, wo/auf welcher Ebene eine bestimmte Sortierung ist in der Lage eingestellt werden, die nicht speziell aufutf8_unicode_ci
. Und so weit der erste Teil deiner Antwort, dies ist für eine dynamische setup in einer Anwendung, führt die Abfrage also wo Sie siehe Spalte Spezifikationen, das ist der Teil, wo ich finden, dass es dynamisch ist oder nicht bekannt. Ich wickeln Sie eine Abfrage, die aus verschiedenen Konfigurationen mit einer wildcard Spalte auswählen, die als Teil der Tabelle erstellen.CREATE
Teil; lassen Sie dieSELECT
tun den rest. Siehe "Beispiel 2".Folgende hat Arbeit für mich auf MariaDB, version 10: