Den Typ einer Spalte in MySQL zu ändern, ist eine alltägliche Aufgabe bei der Arbeit mit Datenbanken. Vielleicht musst du den Typ einer Spalte an neue Datenanforderungen anpassen oder die Performance optimieren. Dieses Tutorial erklärt dir anhand praktischer Beispiele, wie du den Spaltentyp mit der ALTER TABLE-Anweisung änderst.
Die ALTER TABLE-Anweisung verstehen
Mit der ALTER TABLE-Anweisung änderst du die Struktur einer bestehenden Tabelle. Du kannst damit Spalten und Indizes hinzufügen, löschen oder ändern. Um einen Spaltentyp zu ändern, lautet die grundlegende Syntax:
ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;
Schauen wir uns die Syntax genauer an:
-
table_name: Der Name der Tabelle mit der Spalte, die du ändern willst. -
column_name: Der Name der Spalte, die du ändern willst. -
new_data_type: Der neue Datentyp, den die Spalte bekommen soll.
Beispiel: Spaltentyp in MySQL ändern
Nehmen wir eine Tabelle namens users mit folgender Struktur:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
age INT
);
Die anfängliche Struktur kannst du so prüfen:
DESCRIBE users;
Erwartete Ausgabe:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
Typ der Spalte age ändern
Angenommen, du willst die Spalte age von INT auf TINYINT ändern, weil der Wertebereich für das Alter klein ist und du Speicherplatz sparen möchtest.
ALTER TABLE users MODIFY COLUMN age TINYINT;
Mit dem obigen Befehl wird die Spalte age auf TINYINT geändert. Prüfe die Änderung:
DESCRIBE users;
Erwartete Ausgabe:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(50) | YES | | NULL | |
| age | tinyint | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
Beachte, dass TINYINT einen kleineren Zahlenbereich speichern kann als INT. Wie du dir denken kannst, kann das bei der Konvertierung der Daten in der Tabelle zu Problemen führen. Was das bedeutet, erkläre ich weiter unten im Abschnitt Conversion Issues.
Typ der Spalte username ändern
Jetzt ändern wir die Spalte username von VARCHAR(50) auf VARCHAR(100), um längere Benutzernamen zu erlauben.
ALTER TABLE users MODIFY COLUMN username VARCHAR(100);
Prüfe die Änderung:
DESCRIBE users;
Erwartete Ausgabe:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(100) | YES | | NULL | |
| age | tinyint | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
Probleme bei der Datenkonvertierung
Wenn du einen Spaltentyp änderst, kann es zu Problemen kommen, falls die vorhandenen Daten nicht mit dem neuen Typ kompatibel sind. MySQL versucht, die vorhandenen Daten zu konvertieren. Lässt sich ein Wert aber nicht konvertieren, kann das zu NULL-Werten oder abgeschnittenen Daten führen.
Beispiel: Abgeschnittene Daten – INT zu TINYINT
In unserem Beispiel von INT zu TINYINT können Daten abgeschnitten werden, weil TINYINT nicht denselben Wertebereich unterstützt wie INT.
- INT kann Werte von -2.147.483.648 bis 2.147.483.647 (signed) oder 0 bis 4.294.967.295 (unsigned) speichern.
- TINYINT kann Werte von -128 bis 127 (signed) oder 0 bis 255 (unsigned) speichern.
Das passiert bei der Konvertierung:
a. Liegen die INT-Werte in der Spalte im Bereich, den TINYINT speichern kann, werden sie problemlos konvertiert.
b. Überschreiten die INT-Werte den Bereich von TINYINT, werden sie abgeschnitten, damit sie in den TINYINT-Bereich passen. Ein INT-Wert von 300 wird zum Beispiel bei signed TINYINT auf 127 oder bei unsigned TINYINT auf 255 gekürzt.
Überschreiten die Daten die Grenzen des neuen Datentyps, gibt MySQL bei der Konvertierung je nach SQL-Mode-Einstellungen eventuell Warnungen oder Fehler aus.
Beispiel: Wechsel zu einem inkompatiblen Typ
Sieh dir dieses Szenario an:
ALTER TABLE users MODIFY COLUMN age CHAR(3);
Damit wird die Spalte age auf CHAR(3) geändert. Ist ein Alter jedoch größer als 999, wird es auf die ersten drei Zeichen gekürzt. Stell immer sicher, dass der neue Typ mit den vorhandenen Daten umgehen kann, damit keine Informationen verloren gehen.
Fazit
Um in MySQL einen Spaltentyp zu ändern, verwendest du die ALTER TABLE-Anweisung mit der MODIFY COLUMN-Klausel. Prüfe Änderungen immer und achte auf mögliche Probleme bei der Datenkonvertierung. Dieses Tutorial hat dir anhand praktischer Beispiele gezeigt, wie das geht, damit du es sicher in deinen Projekten anwenden kannst.
Wenn du die ALTER TABLE-Anweisung verstehst und nutzt, kannst du deine Datenbankstrukturen in MySQL effektiv verwalten und optimieren.
Beekeeper Studio ist eine kostenlose & quelloffene Datenbank-GUI
Das beste SQL-Abfrage- & Editor-Tool, das ich je benutzt habe. Es bietet alles, was ich zum Verwalten meiner Datenbank brauche. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio ist schnell, intuitiv und einfach zu bedienen. Beekeeper unterstützt jede Menge Datenbanken und läuft hervorragend auf Windows, Mac und Linux.
Was Nutzer über Beekeeper Studio sagen
„Beekeeper Studio hat meinen alten MySQL-Workflow komplett ersetzt. Es ist schnell, intuitiv und macht die Arbeit mit Datenbanken wieder zum Vergnügen.“
„Ich habe schon viele Datenbank-GUIs ausprobiert, aber Beekeeper trifft genau die richtige Balance zwischen Features und Einfachheit. Es funktioniert einfach.“