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

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:

  1. Verwende doppelte Anführungszeichen (") bei Bezeichnungen, die eine konkrete Groß-/Kleinschreibung erfordern (z. B. in PostgreSQL oder Oracle).
  2. Überprüfe die Groß-/Kleinschreibkonfiguration der jeweiligen Datenbank:
    • MySQL/MariaDB: Stelle lower_case_table_names passend ein.
    • Andere Datenbanken: Beachte die jeweiligen Standardverhalten.
  3. 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.