In MySQL kann das Problem der Groß- und Kleinschreibung von Tabellennamen auftreten. Tatsächlich hängt dies mit der Plattform (Betriebssystem) und der Systemvariable lower_case_table_names zusammen. Zusammenfassend können Sie sich bei Interesse das offizielle Dokument „Identifier Case Sensitivity“ ansehen. In MySQL entsprechen Datenbanken Verzeichnissen innerhalb des Datenverzeichnisses. Jede Tabelle in einer Datenbank entspricht mindestens einer Datei innerhalb des Datenbankverzeichnisses (und möglicherweise mehr, abhängig von der Speicher-Engine). Trigger entsprechen ebenfalls Dateien. Folglich spielt die Groß-/Kleinschreibung des zugrunde liegenden Betriebssystems eine Rolle bei der Groß-/Kleinschreibung von Datenbank-, Tabellen- und Triggernamen. Das bedeutet, dass solche Namen unter Windows nicht zwischen Groß- und Kleinschreibung unterscheiden, in den meisten Unix-Varianten jedoch schon. Eine bemerkenswerte Ausnahme ist macOS, das auf Unix basiert, aber einen Standarddateisystemtyp (HFS+) verwendet, der nicht zwischen Groß- und Kleinschreibung unterscheidet. macOS unterstützt jedoch auch UFS-Volumes, die wie jedes Unix zwischen Groß- und Kleinschreibung unterscheiden. Weitere Informationen finden Sie unter Abschnitt 1.8.1, „MySQL-Erweiterungen zu Standard-SQL“. Die Systemvariable lower_case_table_names beeinflusst auch, wie der Server mit der Groß-/Kleinschreibung von Bezeichnern umgeht, wie später in diesem Abschnitt beschrieben wird. In MySQL entsprechen Datenbanken Verzeichnissen innerhalb des Datenverzeichnisses. Jede Tabelle in einer Datenbank entspricht mindestens einer Datei (je nach Speicher-Engine möglicherweise mehr) im Datenbankverzeichnis. Trigger entsprechen auch Dateien. Daher spielt die Groß-/Kleinschreibung des zugrunde liegenden Betriebssystems eine wichtige Rolle bei der Groß-/Kleinschreibung von Datenbank-, Tabellen- und Triggernamen. Dies bedeutet, dass die Groß-/Kleinschreibung unter Windows nicht beachtet wird, in den meisten Unix-Varianten jedoch schon. Eine bemerkenswerte Ausnahme ist macOS, das auf Unix basiert, aber einen Groß-/Kleinschreibung nicht berücksichtigenden Standarddateisystemtyp (HFS+) verwendet. Allerdings unterstützt macOS auch UFS-Volumes, die wie jedes Unix zwischen Groß- und Kleinschreibung unterscheiden. Siehe Abschnitt 1.8.1, „MySQL-Erweiterungen zu Standard-SQL“. Die Systemvariable lower_case_table_names beeinflusst auch, wie der Server die Groß-/Kleinschreibung von Bezeichnern handhabt, wie später in diesem Abschnitt beschrieben. Linux: Bei Datenbanknamen und Tabellennamen muss die Groß-/Kleinschreibung streng beachtet werden. Windows: Keine Groß-/Kleinschreibung beachten Hinweis: Bei Spaltennamen, Indizes, gespeicherten Prozeduren und Ereignisnamen wird auf keiner Plattform die Groß-/Kleinschreibung beachtet. Auch bei Spaltenaliasen wird die Groß-/Kleinschreibung nicht beachtet. Hinweis: Bei Spalten-, Index-, gespeicherten Routine- und Ereignisnamen sowie bei Spaltenaliasnamen wird auf keiner Plattform die Groß-/Kleinschreibung beachtet. Die folgende Testumgebung ist Red Hat Enterprise Linux Server Release 5.7, MySQL 5.6.20: mysql> Variablen wie „lower_case_table_names“ anzeigen; +------------------------+----------+ | Variablenname | Wert | +------------------------+----------+ | Tabellennamen in Kleinbuchstaben | 0 | +------------------------+----------+ 1 Zeile im Satz (0,00 Sek.) MySQL> mysql> verwende mydb; Datenbank geändert mysql> Tabelle erstellen Test (ID int); Abfrage OK, 0 Zeilen betroffen (0,07 Sek.) mysql> Tabelle erstellen TEST(id int); Abfrage OK, 0 Zeilen betroffen (0,09 Sek.) mysql> in Testwerte einfügen (1); Abfrage OK, 1 Zeile betroffen (0,03 Sek.) mysql> in TEST-Wert einfügen (2); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> wähle * aus Test; +------+ |Ich würde| +------+ | 1 | +------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle * aus TEST; +------+ |Ich würde| +------+ | 2 | +------+ 1 Zeile im Satz (0,00 Sek.) MySQL> Nachdem Sie lower_case_table_names=1 in der Konfigurationsdatei my.cnf festgelegt haben (1 bedeutet Groß-/Kleinschreibung wird nicht beachtet, 0 bedeutet Groß-/Kleinschreibung wird beachtet), starten Sie den MySQL-Dienst neu und führen Sie den folgenden Test durch: mysql> verwende mydb; Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten Datenbank geändert mysql> wähle * aus Test; +------+ |Ich würde| +------+ | 1 | +------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle * aus TEST; +------+ |Ich würde| +------+ | 1 | +------+ 1 Zeile im Satz (0,00 Sek.) MySQL> Sie können sehen, dass zu diesem Zeitpunkt, egal ob test, TEST oder Test, auf alle als test zugegriffen wird. Zu diesem Zeitpunkt kann auf die Tabelle „TEST“ nicht zugegriffen werden. Die Systemvariable lower_case_table_names ist eine schreibgeschützte Variable und kann in der aktuellen Sitzung nicht geändert werden. Unter dieser Einstellung tritt bei Verwendung von mysqldump zum Sichern der Datenbank der folgende Fehler auf, wenn derselbe Tabellenname vorhanden ist: mysqldump: Habe Fehler erhalten: 1066: Nicht eindeutige Tabelle/Alias: „Test“ bei Verwendung von LOCK TABLES Diese Situation ist ziemlich problematisch. Sie müssen die Variable lower_case_table_names=0 in der Konfigurationsdatei my.cnf festlegen und den MySQL-Dienst neu starten. Daher ist es sehr wichtig, vorauszuplanen und eine einheitliche Benennungsregel zu verwenden, um solche Probleme zu vermeiden. Darüber hinaus hat die Systemvariable lower_case_table_names drei Werte: 0, 1 und 2. 1. Auf 0 setzen: Tabellennamen werden in der gleichen Schreibweise wie das von Ihnen geschriebene SQL gespeichert, Großbuchstaben sind Großbuchstaben und Kleinbuchstaben sind Kleinbuchstaben, und beim Vergleich wird zwischen Groß- und Kleinschreibung unterschieden. 2. Auf 1 setzen: Tabellennamen werden in Kleinbuchstaben umgewandelt und auf der Festplatte gespeichert, und bei Vergleichen wird nicht zwischen Groß- und Kleinschreibung unterschieden. 3. Auf 2 setzen: Tabellennamen werden entsprechend der Groß-/Kleinschreibung des von Ihnen geschriebenen SQL gespeichert, Großbuchstaben sind Großbuchstaben und Kleinbuchstaben sind Kleinbuchstaben, und beim Vergleich werden sie alle in Kleinbuchstaben umgewandelt.
1: FEHLER 1010 (HY000): Fehler beim Löschen der Datenbank (rmdir „./xxxx“ nicht möglich, Fehlernummer: 39) 1: FEHLER 1010 (HY000): Fehler beim Löschen der Datenbank (rmdir „./xxxx“ nicht möglich, Fehlernummer: 39) mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |MeineDatenbank| | meinedb | |mysql | | Leistungsschema | |tmonitor| | xiangrun | +--------------------+ 7 Zeilen im Satz (0,01 Sek.) mysql> Variablen wie „lower_case_table_names“ anzeigen; +------------------------+----------+ | Variablenname | Wert | +------------------------+----------+ | Tabellennamen in Kleinbuchstaben | 1 | +------------------------+----------+ 1 Zeile im Satz (0,00 Sek.) mysql> Datenbank mydb löschen; FEHLER 1010 (HY000): Fehler beim Löschen der Datenbank (RMDIR „./mydb“ nicht möglich, Fehlernummer: 39) MySQL> Lösung: Setzen Sie die Variable lower_case_table_names=0 in der Konfigurationsdatei my.cnf, starten Sie den MySQL-Dienst neu und löschen Sie anschließend die Datenbank. 2: FEHLER 1049 (42000): Unbekannte Datenbank 'xxx' mysql> Variablen wie „lower_case_table_names“ anzeigen; +------------------------+----------+ | Variablenname | Wert | +------------------------+----------+ | Tabellennamen in Kleinbuchstaben | 1 | +------------------------+----------+ 1 Zeile im Satz (0,01 Sek.) MySQL> mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |MeineDatenbank| |mysql | | Leistungsschema | |tmonitor| | xiangrun | +--------------------+ 6 Zeilen im Satz (0,01 Sek.) mysql> MyDB verwenden; FEHLER 1049 (42000): Unbekannte Datenbank „mydb“ MySQL> Quellen: https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html Zusammenfassen Oben habe ich Ihnen das Problem der Groß- und Kleinschreibung von Bezeichnern in MySQL vorgestellt. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: Implementierung der Änderung von Konfigurationsdateien im Docker-Container
>>: Realisieren Sie einen super coolen Wasserlichteffekt auf Leinwandbasis
Vorwort Manchmal muss die Höhe eines Box-Containe...
RocketMQ ist eine verteilte, warteschlangenbasier...
MySQL unterstützt viele Arten von Tabellen (d. h....
Die Methode zum Umbrechen des Inhalts (Titelattrib...
Inhaltsverzeichnis Frage Serverebene und Speicher...
Vor einiger Zeit stieß ich während der Entwicklun...
Das Upload-Formular mit Bildvorschaufunktion, der...
Vorwort Die Rolle des Prozessmanagements: Integri...
Inhaltsverzeichnis Was ist MySQL NDB Cluster? Vor...
Inhaltsverzeichnis Vorwort Mehrere gängige Bitope...
Ich weiß nicht, ob Sie bemerkt haben, dass beim Ö...
Es gibt in letzter Zeit zu viel Wissen zu lernen,...
Experimentelle Umgebung: MySQL 5.7.22 Binäres Log...
Was bedeutet Strg+C, Strg+D, Strg+Z in Linux? Str...
So zentrieren Sie ein Element im Browserfenster H...