Bei MySQL entsprechen Datenbanken den Verzeichnissen im
Datenverzeichnis. Jede Tabelle in einer Datenbank entspricht
mindestens einer Datei (abhängig von der Speicher-Engine
möglicherweise auch mehreren) im Datenbankverzeichnis. Hieraus
folgt, dass bezüglich der Groß-/Kleinschreibung von Datenbank-
und Tabellennamen die Regeln des zugrunde liegenden
Betriebssystems beachtet werden müssen. Dies bedeutet, dass die
Groß-/Kleinschreibung von Datenbank- und Tabellennamen bei den
meisten Unix-Varianten unterschieden wird, bei Windows hingegen
nicht. Eine beachtenswerte Ausnahme ist Mac OS X, welches zwar
auf Unix basiert, standardmäßig aber einen Dateisystemtyp
verwendet, der die Groß-/Kleinschreibung nicht unterscheidet.
Allerdings unterstützt Mac OS X auch UFS-Volumes, die wie bei
Unix üblich die Groß-/Kleinschreibung unterscheiden. Siehe
auch Abschnitt 1.9.4, „MySQL-Erweiterungen zu ANSI SQL92“. Die Systemvariable
lower_case_table_names
beeinflusst ebenfalls
die Vorgehensweise des Servers in Bezug auf die
Groß-/Kleinschreibung bei Bezeichnern. Weitere Informationen
hierzu folgen in diesem Abschnitt.
Hinweis: Zwar wird die
Groß-/Kleinschreibung bei Datenbank- und Tabellennamen auf
manchen Plattformen nicht unterschieden, aber Sie sollten eine
gegebene Datenbank oder Tabelle auch nicht mit unterschiedlichen
Schreibweisen innerhalb derselben Anweisung referenzieren. Die
folgende Anweisung würde nicht funktionieren, weil sie eine
Tabelle sowohl als my_table
als auch als
MY_TABLE
referenziert:
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
Bei Namen von Spalten, Indizes, gespeicherten Routinen und Triggern wird die Groß-/Kleinschreibung auf keiner Plattform unterschieden. Gleiches gilt für Spaltenaliase.
Standardmäßig wird die Groß-/Kleinschreibung bei
Tabellenaliasen unter Unix, nicht aber unter Windows oder Mac OS
X unterschieden. Die folgende Anweisung würde unter Unix nicht
funktionieren, da sie einen Alias sowohl als
a
als auch als A
referenziert:
mysql>SELECT
->col_name
FROMtbl_name
AS aWHERE a.
col_name
= 1 OR A.col_name
= 2;
Unter Windows hingegen ist diese Anweisung zulässig. Damit Sie diesen Unterschieden möglichst wenig Beachtung schenken müssen, sollten Sie am besten eine konsistente Benennungskonvention verwenden, in der Datenbanken und Tabellen immer mit aus Kleinbuchstaben bestehenden Namen erstellt und referenziert werden. Eine solche Konvention wird im Sinne maximaler Portabilität und Benutzerfreundlichkeit empfohlen.
Wie Tabellen- und Datenbanknamen auf Festplatte gespeichert und
in MySQL verwendet werden, bestimmt die Systemvariable
lower_case_table_names
, die Sie beim Start
von mysqld einstellen können.
lower_case_table_names
kann die in der
nachfolgenden Tabelle aufgeführten Werte annehmen. Unter Unix
ist der Standardwert von
lower_case_table_names
0, unter Windows 1 und
unter Mac OS X 2.
Wert | Bedeutung |
0 |
Tabellen- und Datenbanknamen werden in der Schreibweise auf Festplatte
gespeichert, die in der CREATE TABLE -
bzw. CREATE DATABASE -Anweisung
angegeben wurde. Beim Namensvergleich wird die
Groß-/Kleinschreibung unterschieden. Beachten Sie,
dass, wenn Sie diese Variable auf einem Dateisystem ohne
Unterscheidung der Groß-/Kleinschreibung mit
--lower-case-table-names=0 explizit auf
0 setzen und dann MyISAM -Tabellen mit
Namen in anderer Schreibung aufrufen, dies zu einer
Beschädigung der Indizes führen kann. |
1 |
Tabellennamen werden in Kleinbuchstaben auf Festplatte gespeichert. Beim Namensvergleich wird die Groß-/Kleinschreibung nicht unterschieden. MySQL konvertiert beim Speichern und Abrufen alle Tabellennamen in Kleinbuchstaben. Dieses Verhalten gilt auch für Datenbanknamen und Tabellenaliase. |
2 |
Tabellen- und Datenbanknamen werden in der Schreibweise auf Festplatte
gespeichert, die in der CREATE TABLE -
bzw. CREATE DATABASE -Anweisung
angegeben wurde; beim Nachschlagen konvertiert MySQL sie
jedoch in Kleinbuchstaben. Beim Namensvergleich wird die
Groß-/Kleinschreibung nicht unterschieden.
Hinweis: Dies
funktioniert nur auf Dateisystemen,
die die Groß-/Kleinschreibung nicht unterscheiden!
InnoDB -Tabellennamen werden in
Kleinbuchstaben (wie bei
lower_case_table_names=1 )
gespeichert. |
Wenn Sie MySQL nur auf einer Plattform verwenden, dann müssen
Sie die Variable lower_case_table_names
normalerweise nicht umstellen. Allerdings kann es zu Problemen
kommen, wenn Sie Tabellen auf andere Plattformen mit
unterschiedlicher Behandlung der Groß-/Kleinschreibung
portieren wollen. So können Sie unter Unix beispielsweise zwei
verschiedene Tabellen mit den Namen my_table
und MY_TABLE
verwenden; unter Windows jedoch
werden diese beiden Namen als identisch betrachtet. Um
Transferprobleme aufgrund der Schreibweise von Datenbank- oder
Tabellennamen zu vermeiden, haben Sie zwei Optionen:
Sie verwenden lower_case_table_names=1
auf allen Systemen. Der wesentliche Nachteil besteht hierbei
darin, dass Sie, wenn Sie SHOW TABLES
bzw. SHOW DATABASES
verwenden, die Namen
nicht in der ursprünglichen Schreibweise angezeigt
bekommen.
Sie verwenden unter Unix
lower_case_table_names=0
und unter
Windows lower_case_table_names=2
.
Hierdurch wird die Schreibweise von Datenbank- und
Tabellennamen beibehalten. Allerdings müssen Sie in diesem
Fall gewährleisten, dass Ihre Anweisungen unter Windows die
korrekte Schreibweise für Datenbank- und Tabellennamen
enthalten. Wenn Sie Ihre Anweisungen dann auf Unix
übertragen, wo die Groß-/Kleinschreibung unterschieden
wird, dann funktionieren sie aufgrund der falschen
Schreibweise nicht mehr.
Ausnahme: Wenn Sie
InnoDB
-Tabellen verwenden, sollten Sie
lower_case_table_names
auf allen
Plattformen auf 1 setzen. Hiermit wird die Konvertierung von
Namen in die Kleinschreibung erzwungen.
Beachten Sie, dass Sie, wenn Sie die Systemvariable
lower_case_table_names
unter Unix auf 1
setzen wollen, zunächst Ihre alten Datenbank- und Tabellennamen
in die Kleinschreibung konvertieren müssen, bevor Sie
mysqld mit der neuen Variableneinstellung neu
starten.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.