SQL-FAQ: Meine Datenbank-, Tabellen- und Spaltennamen werden immer klein angezeigt, obwohl sie mit Großbuchstaben benannt wurden
Verhalten der Groß-/Kleinschreibung in SQL-Datenbanken
Das Verhalten, ob Bezeichnungen wie Datenbanknamen, Tabellennamen, Spalten usw. in SQL genau in der Groß-/Kleinschreibung übernommen werden, hängt von der verwendeten Datenbank-Engine sowie von der Konfiguration des Datenbank-Servers ab. Zum Beispiel wird bei dem Befehl:
CREATE DATABASE Vereinsmitglieder;
das Ergebnis durch die Groß-/Kleinschreibbehandlung der Datenbank determiniert. Nachfolgend wird aufgezeigt, wie verschiedene Datenbanken dieses Verhalten handhaben und wie du sicherstellen kannst, dass deine Bezeichnungen exakt übernommen werden.
1. Verhalten in verschiedenen SQL-Datenbanken
MySQL / MariaDB
Standardverhalten:
- Datenbank- und Tabellennamen:
- Case-sensitive unter Linux.
- Case-insensitive unter Windows.
- Spaltennamen und Aliase: Case-insensitive, unabhängig vom Betriebssystem.
Beispiel:
CREATE DATABASE Vereinsmitglieder;
SHOW DATABASES;
- Unter Linux wird die Datenbank als
Vereinsmitglieder
gespeichert. - Unter Windows wird sie möglicherweise als
vereinsmitglieder
angezeigt, da hier Groß-/Kleinschreibung ignoriert wird.
Lösung: Setze die Server-Variable lower_case_table_names
in der MySQL-Konfigurationsdatei (my.cnf
) auf den gewünschten Wert:
- 0: Groß-/Kleinschreibung bleibt erhalten (empfohlen für Linux).
- 1: Alles wird in Kleinbuchstaben konvertiert (Standard unter Windows).
- 2: Bezeichnungen in Abfragen müssen exakt übereinstimmen, aber auf der Festplatte wird alles in Kleinbuchstaben gespeichert.
Beispiel für my.cnf
:
[mysqld]
lower_case_table_names=0
PostgreSQL
Standardverhalten:
- Alle Bezeichner werden automatisch in Kleinbuchstaben konvertiert, es sei denn, sie werden in doppelte Anführungszeichen (
"
) eingeschlossen.
Beispiel:
CREATE DATABASE Vereinsmitglieder;
-- Ergebnis: vereinsmitglieder
CREATE DATABASE "Vereinsmitglieder";
-- Ergebnis: Vereinsmitglieder
Lösung: Verwende doppelte Anführungszeichen "
, um Groß-/Kleinschreibung beizubehalten.
Beispiel:
CREATE TABLE "Vereinsmitglieder" (
"ID" SERIAL PRIMARY KEY,
"Name" VARCHAR(255)
);
Microsoft SQL Server (MSSQL)
Standardverhalten:
- Bezeichner sind standardmäßig case-insensitive, es sei denn, die Kollation der Datenbank oder des Servers wird entsprechend konfiguriert.
Beispiel:
CREATE DATABASE Vereinsmitglieder;
SELECT name FROM sys.databases;
-- Ergebnis: Vereinsmitglieder
Lösung:
- Die Groß-/Kleinschreibung der Bezeichnungen bleibt erhalten, wenn du keine spezifische Kollation mit Case-Sensitivity setzt.
Oracle
Standardverhalten:
- Alle Bezeichner werden in Großbuchstaben konvertiert, es sei denn, sie werden in doppelte Anführungszeichen (
"
) eingeschlossen.
Beispiel:
CREATE TABLE Vereinsmitglieder (id NUMBER, name VARCHAR2(255));
-- Ergebnis: VEREINSMITGLIEDER
CREATE TABLE "Vereinsmitglieder" ("ID" NUMBER, "Name" VARCHAR2(255));
-- Ergebnis: Vereinsmitglieder
Lösung: Verwende doppelte Anführungszeichen "
, um Groß-/Kleinschreibung beizubehalten.
Beispiel:
CREATE TABLE "Vereinsmitglieder" ("ID" NUMBER, "Name" VARCHAR2(255));
2. Best Practices für konsistente Bezeichnungen
1. Nutzung von doppelten Anführungszeichen:
- Verwendung von
"
(falls unterstützt, z. B. in PostgreSQL oder Oracle), um Bezeichnungen exakt in der gewünschten Schreibweise zu speichern.
Beispiel:
CREATE TABLE "Vereinsmitglieder" (
"ID" SERIAL PRIMARY KEY,
"Name" VARCHAR(255)
);
2. Reservierte Wörter vermeiden:
- Vermeide die Nutzung von reservierten Schlüsselwörtern (z. B.
SELECT
,FROM
,TABLE
) als Tabellen- oder Spaltennamen.
3. Standardisierung der Schreibweise:
- Wähle ein einheitliches Benennungsschema und halte dich daran, z. B.:
- Alles in Kleinbuchstaben:
vereinsmitglieder
- CamelCase:
VereinsMitglieder
- Snake_Case:
vereins_mitglieder
- Alles in Kleinbuchstaben:
4. Anpassung der Kollation (bei Bedarf):
- Für MySQL/MariaDB kann über die Einstellung
lower_case_table_names
klar definiert werden, wie die Groß-/Kleinschreibung behandelt wird.
3. Fazit
Um sicherzustellen, dass Bezeichnungen exakt in der gewünschten Schreibweise übernommen werden:
- Verwende doppelte Anführungszeichen (
"
) bei Bezeichnungen, die eine konkrete Groß-/Kleinschreibung erfordern (z. B. in PostgreSQL oder Oracle). - Überprüfe die Groß-/Kleinschreibkonfiguration der jeweiligen Datenbank:
- MySQL/MariaDB: Stelle
lower_case_table_names
passend ein. - Andere Datenbanken: Beachte die jeweiligen Standardverhalten.
- MySQL/MariaDB: Stelle
- Halte dich an konsistente Benennungskonventionen und vermeide die Nutzung von reservierten Wörtern bei Bezeichnungen.
Für MySQL unter Linux werden Tabellen- und Datenbanknamen in der Regel so gespeichert, wie sie eingegeben werden. Unter Windows solltest du die Einstellung lower_case_table_names
anpassen, wenn du eine case-sensitive Speicherung benötigst.