MySQL Unterscheidung von Groß- u. Kleinschreibung in Tabellennamen

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Allgemeines

Linux als Betriebssystem ist case sensitive, das bedeutet, dass z.B. bei Datenbank-Abfragen unterschieden wird, ob ein Tabellenname oder Feld groß und klein geschrieben wird.
Im Unterschied dazu sind Windows und MacOS case insensitive, das heißt ihr Dateisystem unterscheidet nicht nach Groß- und Kleinschreibung.

Dazu muss man wissen, dass mySQL (im Gegensatz zu Microsoft SQL-Server© oder ORACLE ©) für jede Tabelle der Datenbank - je nach Database-Engine - eine Datei benutzt. Verwendet man mySQL unter Windows©, ist deshalb die Groß- und Kleinschreibung von Tabellennamen egal.

mySQL hat die Möglichkeit, mit unterschiedlichen Datenbank-Typen (Engines) zu arbeiten. Die zwei wichtigsten sind:

Jedes dieser Systeme hat sein Vor- und Nachteile. Deshalb besteht eine REFLEX-Datenbank aus einer Mischung dieser beiden Systeme, je nach Art der Tabelle.

2 Beschreibung

Wird eine Anfrage von REFLEX an die Tabelle MART (Artikel) gestellt, die im Dateisystem des Servers aber als "mart" gespeichert ist, wird mySQL eine Fehlermeldung zurück geben. Die Datenbank-Tabellen sind als einzelne Dateien auf dem Server gespeichert, somit ist man bei der Abfrage erstmal an das Dateisystem gebunden und muss bei Linux zwischen Groß- u. Kleinschreibung unterscheiden. Die Felder in einer Tabelle hingegen sind in dieser Datei gespeichert und werden somit von mySQL verwaltet. Hier wird immer die Groß- u. Kleinschreibung beachtet.

Für die Tabellen hat der mySQL-Server eine Option, mit der man die Unterscheidung zwischen Groß- u. Kleinschreibung abschaltet und somit auch Anfragen an MART oder mart annimmt und an die eigentliche Tabelle MART gereicht werden.

3 Erklärung des Parameters

Die Option mit der man den Zugriff auf die Tabellen des mySQL-Servers case insensitve (das heißt Missachtung der Groß- u. Kleinschreibung) schalten kann lautet:

lower_case_table_names = 1

Mögliche Werte, die dieser Parameter annehmen kann, sind: 0, 1, 2.
Für die genaue Beschreibung sei an dieser Stelle auf die Dokumentation des mySQL-Servers verwiesen: http://dev.mysql.com/doc/refman/5.1/de/name-case-sensitivity.html

Der Parameter lässt sich entweder als Start-Parameter beim Start des Server übergeben oder aber, für die dauerhafte Anwendung, in der mySQL-Serverkonfigurationsdatei my.cnf (abhängig vom Betriebssystem, unter der Standardinstallation in Debian: /etc/mysql/my.cnf) setzen. Wichtig ist, dass sich der Parameter in dem Abschnitt [mysqld] der Konfigurationsdatei befindet. Danach muss der mysql-Dienst neu gestartet werden (unter Debian mit dem Befehl "/etc/init.d/mysql restart"), damit die Änderung Wirkung zeigt. Bitte vorher jedoch den nächsten Abschnitt lesen.

4 Anwendung des Parameters

Dieser Parameter sollte dann gesetzt werden, wenn Probleme mit der Groß- und Kleinschreibung von Tabellennamen auftreten. Fehlermeldungen wie z.B.

Table reflex.MART does not exist

können Hinweise für das Nicht-Funktionieren des Zugriffs aufgrund von Groß- und Kleinschreibung sein, können aber auch andere Ursachen haben.

Achtung:

Der Parameter sollte nur nach vorausgehender Beschäftigung mit dem Thema und mit Testversuchen auf einem Test-Server erfolgen! Zu beachten ist, dass diese Option erstmal für den gesamten Server gilt! Das heißt nicht nur für eine eventuelle Testdatenbank, sondern für alle Datenbanken auf dem Server.

Bevor der Parameter auf 1 gesetzt wird, muss überprüft werden, ob alle Tabellennamen der Datenbank im Dateisystem wirklich klein geschrieben sind. Dies ist zwar in der Reflex-Installation standardmäßig der Fall, muss aber vorher überprüft werden. In Debian werden die Datenbanken und /var/lib/mysql/ gespeichert.