Datenbanken
Ein Rechtsklick auf eine Datenbank in der Seitenleiste führt zu ihren Eigenschaften, zum Ändern des Zeichensatzes und zum Umbenennen.
Datenbankeigenschaften
Datenbankeigenschaften zeigt den Namen der Datenbank, den Standard-Zeichensatz und die Kollation. Jeder Wert hat eine Schaltfläche Kopieren, und Alles kopieren legt alle drei auf einmal in die Zwischenablage:
Name: shop
Character set: utf8mb4
Collation: utf8mb4_unicode_ciWas die beiden Werte bedeuten, hängt vom System ab:
| System | Zeichensatz | Kollation |
|---|---|---|
| MySQL / MariaDB | Standardzeichensatz der Datenbank | Standardkollation |
| PostgreSQL | Encoding (z. B. UTF8) | datcollate, die Locale, nach der Text sortiert wird |
| SQL Server | Codepage der Kollation (z. B. CP1250, UTF-8 (CP65001)) | Kollation der Datenbank |
| SQLite | PRAGMA encoding | BINARY |
Zeichensatz und Kollation ändern
Unter MySQL und MariaDB hat das Eigenschaftenfenster Zeichensatz ändern…. Wählen Sie den Zeichensatz — die Kollation springt auf dessen Standard, und Sie können eine andere wählen.
Mit Auch auf alle Tabellen und Felder der Datenbank anwenden (Standard) endet die Änderung nicht beim Standardwert der Datenbank. Das Fenster zählt Tabellen und Textfelder und zeigt, wie viele Tabellen tatsächlich konvertiert werden müssen; Tabellen, die die gewählte Kollation schon haben, werden übersprungen.
Anwenden fragt nach und dann:
- ändert es den Standard der Datenbank (
ALTER DATABASE … CHARACTER SET … COLLATE …), sodass ab jetzt angelegte Tabellen den neuen Zeichensatz erhalten; - konvertiert es die Tabellen einzeln mit
ALTER TABLE … CONVERT TO CHARACTER SET …, was den Standard der Tabelle und jede Spalte vom TypCHAR,VARCHAR,TEXT,ENUMundSETändert.
Ein Fortschrittsbalken zeigt, welche Tabelle gerade konvertiert wird. Stoppen beendet den Lauf nach der laufenden Tabelle. Eine fehlgeschlagene Tabelle hält die anderen nicht auf; am Ende steht jeder Fehler mit dem Tabellennamen in der Liste.
Fremdschlüssel auf Textspalten stören nicht: Jede Konvertierung läuft mit abgeschalteter Fremdschlüsselprüfung, sodass eine Kindtabelle vor ihrer Elterntabelle geändert werden kann. Die Schlüssel bleiben bestehen und werden wie zuvor durchgesetzt.
Jede Tabelle wird neu aufgebaut
CONVERT TO schreibt die Tabelle neu und sperrt sie so lange, was bei einer großen Tabelle dauert. Der Wechsel auf einen Mehrbyte-Zeichensatz wie utf8mb4 kann außerdem eine TEXT-Spalte zu MEDIUMTEXT machen, damit ihre Kapazität erhalten bleibt. Erstellen Sie vorher eine Sicherung.
Sichten haben keine eigenen Spalten und werden nicht konvertiert. Prozeduren und Funktionen behalten die Kollation, mit der sie angelegt wurden; legen Sie sie neu an, wenn sie die neue verwenden sollen.
PostgreSQL, SQL Server und SQLite zeigen die Werte nur lesend: Keines dieser Systeme kann das bei einer bestehenden Datenbank sicher ändern.
Datenbank umbenennen
Datenbank umbenennen… steht im Rechtsklickmenü der Datenbank für MySQL, MariaDB, PostgreSQL und SQL Server. Eine SQLite-Datenbank ist eine Datei — benennen Sie sie über die Verbindungsbearbeitung um.
PostgreSQL und SQL Server
Beide benennen mit einer Anweisung um (ALTER DATABASE … RENAME TO und ALTER DATABASE … MODIFY NAME). Tabellen, andere Objekte und Rechte bleiben, wo sie sind.
Dafür braucht der Server die Datenbank für sich allein. Das Fenster zeigt, wie viele andere Sitzungen sie nutzen, und Andere Sitzungen trennen wirft sie vorher hinaus — ihre offenen Transaktionen werden zurückgesetzt. Die eigenen Verbindungen zur Datenbank schließt NabuSQL selbst.
Unter SQL Server behalten die physischen Dateien (.mdf, .ldf) ihre Namen.
MySQL und MariaDB
MySQL und MariaDB haben dafür keine Anweisung, also baut NabuSQL die Datenbank unter dem neuen Namen neu auf. Das Fenster erklärt die Schritte und listet, was die Datenbank enthält, und die Schaltfläche Umbenennen bleibt deaktiviert, bis Sie Ich verstehe das Risiko und habe ein Backup der Datenbank ankreuzen.
Was passiert:
- Jede Definition, die sich nicht verschieben lässt — Trigger, Sichten, Prozeduren, Funktionen, Events, Rechte — wird zuerst gelesen und in
nabusql_rename_<datenbank>_<zeit>.sqlim Ordner Downloads gespeichert. Lässt sich eine davon nicht lesen, wird nichts geändert. - Die neue Datenbank wird mit demselben Zeichensatz und derselben Kollation angelegt.
- Die Trigger werden gelöscht (MySQL verschiebt keine Tabelle, die einen hat), dann wandern alle Tabellen mit einem einzigen
RENAME TABLE. Das geht schnell — nur Metadaten ändern sich, keine Zeile wird kopiert. - Prozeduren und Funktionen, Sichten, Trigger und Events werden in der neuen Datenbank neu angelegt. Verweise der Form
`alt`.tabellezeigen auf den neuen Namen. Trigger behalten ihre Ausführungsreihenfolge und densql_mode, mit dem sie angelegt wurden. - Benutzerrechte auf die Datenbank, ihre Tabellen und Routinen werden auf den neuen Namen kopiert.
- Nur wenn alle Schritte gelungen sind, werden die alten Rechte entzogen und die alte, dann leere Datenbank gelöscht.
Schlägt Schritt 3 fehl, wird er zurückgenommen: Die Trigger werden neu angelegt und die neue Datenbank entfernt. Schlägt nach dem Verschieben der Tabellen etwas fehl, bleibt die alte Datenbank erhalten, mit allem, was nicht neu angelegt werden konnte, und das Ergebnis listet jeden Schritt mit seinem Status.
Nicht atomar, und außerhalb dieser Datenbank ändert sich nichts
Sichten, Routinen und Trigger in anderen Datenbanken sowie Anwendungen, die sich mit dem alten Namen verbinden, verwenden weiterhin den alten Namen. Während des Umbenennens sollte niemand sonst mit der Datenbank arbeiten.
Existiert das DEFINER-Konto nicht oder fehlt Ihnen das Recht, es zu verwenden, wird das Objekt mit Ihnen als Eigentümer angelegt, und das Ergebnis vermerkt das.
Was NabuSQL für Sie nachzieht
Nach jedem Umbenennen stellt NabuSQL seine eigenen Verweise auf den neuen Namen um: gespeicherte Abfragen, offene Tabs, Aufgaben im Task Scheduler, die Standarddatenbank der Verbindung und den Ordner der gespeicherten Abfragen auf der Festplatte.
