Bei Tabellennamen in MySQL wird zwischen Groß- und Kleinschreibung unterschieden?

173

Bei Tabellennamen in MySQL wird zwischen Groß- und Kleinschreibung unterschieden?

Auf meinem Windows-Entwicklungscomputer kann der Code, den ich habe, meine Tabellen abfragen, die scheinbar nur in Kleinbuchstaben geschrieben sind. Wenn ich auf dem Testserver in unserem Rechenzentrum bereitstelle, scheinen die Tabellennamen mit einem Großbuchstaben zu beginnen.

Die Server, die wir verwenden, sind alle unter Ubuntu.

benstpierre
quelle

Antworten:

203

Allgemein:

Datenbank- und Tabellennamen unterscheiden in Windows nicht zwischen Groß- und Kleinschreibung und in den meisten Unix-Varianten zwischen Groß- und Kleinschreibung.

In MySQL entsprechen Datenbanken Verzeichnissen innerhalb des Datenverzeichnisses. Jede Tabelle in einer Datenbank entspricht mindestens einer Datei im Datenbankverzeichnis. Folglich spielt die Groß- und Kleinschreibung des zugrunde liegenden Betriebssystems eine Rolle bei der Groß- und Kleinschreibung von Datenbank- und Tabellennamen.

Mit der Systemvariablen lower_case_table_names(in der Konfigurationsdatei my.cnf unter [mysqld]) kann konfiguriert werden, wie Tabellennamen auf der Festplatte gespeichert werden .

Weitere Informationen finden Sie im Abschnitt: 10.2.2 Groß- / Kleinschreibung der Kennung .

CloudyMarble
quelle
40
Das hat mich total verbrannt, da mein Code in meiner lokalen Windows-Umgebung hervorragend funktionierte, aber Ausnahmen auslöste, wenn ich unter Linux in die Produktion ging !! Vielen Dank!
Portforwardpodcast
6
Diese Antwort enthält eine Einschränkung, die in der Dokumentation nicht erwähnt wird: InnoDB verwendet keine Datei- oder Verzeichnisnamen für Datenbanken und Tabellen. Daher wird bei den Objekten immer zwischen Groß- und Kleinschreibung unterschieden, selbst wenn sie auf einem System ausgeführt werden, bei dem zwischen Groß- und Kleinschreibung unterschieden wird. In dieser Frage finden Sie ein Beispiel dafür, was aus diesem Grund schief gehen kann: stackoverflow.com/questions/23182969/…
Jules
Das ist nicht die ganze Geschichte. siehe StephenLemberts Antwort, da sie konfigurierbar ist
Chris Wood
1
Standardmäßig verwenden die meisten Mac-Computer ein Dateisystem, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird. Sie können sich jedoch dafür entscheiden, dass Ihr Dateisystem zwischen Groß- und Kleinschreibung unterscheidet.
Tschad
Dies und die Groß- und Kleinschreibung des Dateinamens sind einer der Gründe, warum ich als Webentwickler zu Ubuntu gewechselt bin.
Muhammad bin Yusrat
99

Datenbank- und Tabellennamen unterscheiden in Windows nicht zwischen Groß- und Kleinschreibung und in den meisten Unix- oder Linux-Varianten zwischen Groß- und Kleinschreibung.

Um das Problem zu beheben, setzen Sie die Namen der Kleinbuchstaben auf 1

Kleinbuchstaben_Tabellennamen = 1

Dadurch werden alle Ihre Tabellen in Kleinbuchstaben geschrieben, unabhängig davon, wie Sie sie schreiben

StephenLembert
quelle
1
Unter MacOS X wird auch nicht zwischen Groß- und Kleinschreibung unterschieden, obwohl dies das zugrunde liegende Unix ist. Dies ist vermutlich der Grund, warum die automatische Vervollständigung in MySQL auf dem Mac bei Tabellen- oder Feldnamen zwischen Groß- und Kleinschreibung unterscheidet, obwohl dies bei Abfragen nicht der Fall ist.
David
Ja, aber da, um diese Aussage zu machen? Ich denke, es ist auf: /etc/mysql/my.cnf unter der Gruppe [mysql]. Aber das ist nicht genug, noch muss etwas anderes getan werden (außer natürlich
MySQL
1
Dies betrifft nur neue Tabellen. Bestehende Tabellen müssen vor dem Ändern dieser Einstellung in Kleinbuchstaben umbenannt werden.
Martin
19

Tabellennamen in MySQL sind Dateisystemeinträge, daher wird die Groß- und Kleinschreibung nicht berücksichtigt, wenn das zugrunde liegende Dateisystem vorhanden ist.

Oswald
quelle
3
Ich denke nicht, dass dies für InnoDB-Tabellen immer gilt.
Simon East
@ SimonEast Würdest du bitte einen Grund angeben, warum du das denkst?
Arya
16

Dies hängt von der lower_case_table_namesSystemvariablen ab:

show variables where Variable_name='lower_case_table_names'

Hierfür gibt es drei mögliche Werte:

  • 0- Briefkasten in der Anweisung CREATE TABLEoder angegeben CREATE DATABASE. Bei Namensvergleichen wird zwischen Groß- und Kleinschreibung unterschieden.
  • 1 - Tabellennamen werden auf der Festplatte in Kleinbuchstaben gespeichert, und bei Namensvergleichen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
  • 2- In der Anweisung CREATE TABLEoder angegebener Groß- CREATE DATABASEund Kleinschreibung, aber MySQL konvertiert sie bei der Suche in Kleinbuchstaben. Namensvergleiche unterscheiden nicht zwischen Groß- und Kleinschreibung.

Dokumentation

Raman Sahasi
quelle
11
  1. Suchen Sie die Datei unter /etc/mysql/my.cnf

  2. Bearbeiten Sie die Datei, indem Sie die folgenden Zeilen hinzufügen:

    [mysqld]

    lower_case_table_names=1

  3. sudo /etc/init.d/mysql restart

  4. laufen , mysqladmin -u root -p variables | grep tabledass zu prüfen lower_case_table_namesist 1jetzt

Möglicherweise müssen Sie diese Tabellen neu erstellen, damit sie funktionieren

sendon1982
quelle