Der Typ »VARCHAR« in SQL (MySQL) (Der Typ »VARCHAR« in SQL (MySQL)), Lektion, Seite 724227
https://www.purl.org/stefan_ram/pub/varchar_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Der Typ »VARCHAR« in SQL (MySQL)

Zur Vereinfachung wurde bisher immer »VARCHAR ( 255 )« als Typ verwendet. Nun erweitern wir unsere Kenntnisse über mögliche Typen etwas.

»VARCHAR ( Länge  )«

Dieser Typ umfaßt Texte mit maximal der in den Klammern angegebenen Zahl von Zeichen und wurde bisher immer – auch für Zahlen – verwendet. In den Klammern kann aber auch eine andere Zahl stehen, die nicht zu groß sein darf. (Die genauen Obergrenzen hängen von verschiedenen Umständen ab.)

Unter einem VARCHAR-Typen verstehen wir im folgenden einen Typ, dessen Bezeichnung mit »VARCHAR (« beginnnt.

»VARCHAR ( 255 )«

In diesem Kurs wurde bisher »VARCHAR ( 255 )« als Typ verwendet, weil eine Spalte dieses Typs die meisten Arten von Informationen aufnehmen kann (also auch Numeralia für Zahlen) und einige Versionen von MySQL nur Werte bis »255« zuließen, diese Einschränkung besteht inzwischen aber wohl nicht mehr.

Die Obergrenze für die angegebene Länge

Die in den Klammern angegebene Länge kann zwischen 0 und 65535 liegen, aber unter bestimmten Umständen kann sie in Abhängigkeit von der Zeichencodierung und Begrenzungen der Größe einer Zeile auch noch weiteren Beschränkungen unterworfen sein. Ein Wert von »255« sollte allerdings meist möglich sein.

Zu weiteren Details beachte man das MySQL-Handbuch, etwa »dev.mysql.com/doc/en/char.html«.

Das Einfügen längerer Texte

Wenn versucht wird, Texte einzufügen, die länger als die Obergrenze sind, wird eine Warnung erzeugt und nur die Textanfänge gespeichert, die noch in das Feld passen.

main.sql

WARNINGS; SET sql_mode = '';
DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE BUCHUNG ( BEZEICHNUNG VARCHAR ( 5 ) );

INSERT INTO BUCHUNG ( BEZEICHNUNG ) VALUES ( 'ZAHLUNGSEINGANG' );

SELECT * FROM BUCHUNG;

Protokoll
Warning (Code 1265): Data truncated for column 'BEZEICHNUNG' at row 1
+-------------+
| BEZEICHNUNG |
+-------------+
| ZAHLU |
+-------------+

Der strenge Modus

Durch »SET sql_mode = 'STRICT_ALL_TABLES';« wird der sogenannten „strenge Modus“ für alle Tabellen aktiviert. In diesem Modus wird die Einhaltung einiger Regeln etwas strenger überprüft.

Die Verwendung von »SET sql_mode = 'ANSI,TRADITIONAL';« (genauer: von »SET sql_mode = 'TRADITIONAL';«) umfaßt bereits die Wirkung von »SET sql_mode = 'STRICT_ALL_TABLES';«, da »TRADITIONAL« »STRICT_ALL_TABLES« umfaßt. Der Genauigkeit halber verwenden wir in dieser Lektion oft das speziellere »SET sql_mode = 'STRICT_ALL_TABLES';«.

Das Einfügen längerer Text im strengen Modus

Wenn versucht wird, Texte einzufügen, die länger als die Obergrenze sind, wird im strengen Modus eine Fehlermeldung erzeugt und nichts eingefügt.

main.sql

WARNINGS; SET sql_mode = 'STRICT_ALL_TABLES';
DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE BUCHUNG ( BEZEICHNUNG VARCHAR ( 5 ) );

INSERT INTO BUCHUNG ( BEZEICHNUNG ) VALUES ( 'ZAHLUNGSEINGANG' );

SELECT * FROM BUCHUNG;

Protokoll
ERROR 1406 (22001) at line 6 in file: 'F:\r\j\autocomp\main.sql': Data too long for column 'BEZEICHNUNG' at row 1

Groß- und Kleinschreibung

Die Groß- und Kleinschreibung ist bei Datentypen in MySQL  nicht  signifikant. Das heißt, daß »VARCHAR ( 255 )« dieselbe Bedeutung hat wie »Varchar ( 255 )« oder »varchar ( 255 )«. Wir verwenden in diese Kurs an von nun an manchmal auch Kleinschreibung (wie »double«) bei Datentypen, weil dies von MySQL  bei Verwendung des später in diesem Kurs vorgestellten Kommandos »EXPLAIN« (»DESCRIBE«) selber so ausgegeben wird. Andererseits verwendet die offizielle Dokumentation sowohl von MySQL  (wie beispielsweise »http://dev.mysql.com/doc/refman/5.5/en/floating-point-types.html«) wie auch von Standard-SQL  Großschreibung (wie »DOUBLE«). Daher kann man die Großschreibung im Zweifel bevorzugen.

Wahl einer guten Länge

Aus Sicht der Datenmodellierung sollte für Texte, die ihrer Natur entsprechend nicht in der Länge beschränkt sind, hier eigentlich ein riesiger Wert, wie »999« oder gar »9999« verwendet werden, auch wenn die meisten Texte viel kürzer sind. Beispielsweise umfassen die meisten Namen von Städten nur zirka ein Dutzend Zeichen, aber es gibt prinzipiell keinen Grund, der es ausschließt, daß irgendeine Stadt einen Namen mit Tausenden von Zeichen hat. Es gibt aber technische Begrenzungen, die es hier verlangen, einen nicht zu großen Wert zu wählen, so daß man im Falle von Städtenamen dann als Kompromiß »255« wählen könnte. Dies ist für alle bekannten Städte ausreichend groß, und falls einmal eine Stadt mit einem Namen vorkommen sollte, der mehr als 255 Zeichen umfaßt, so wird es für diesen Namen wahrscheinliche eine gängige Abkürzung geben, die meistens verwendet wird, und dann auch in der Datenbank Verwendung finden könnte.

Falls keine genaue Obergrenze eines Wertebereichs erkannt werden kann, sollte diese sehr großzügig bemessen werden, damit der Wertebereich auch bei Ausreißern mit absurden (aber möglichen oder denkbaren) Werten noch ausreicht. Beispielsweise ist es nicht zu erkennen, wie lang der Name einer Person maximal sein kann. Daher sollte die Länge eines Feld für Personennamen in einer Datenbank sehr großzügig bemessen werden, damit auch außergewöhnlich lange Namen erfaßt werden können.

Personennamen

Auf Hawaii hatten Führerscheine beispielsweise 35 Zeichen für den gesamten Namen. In der Presse wurde von einer Frau Keihanaikukauakahihuliheekahaunaele  aus Hawaii berichtet, deren Nachname  alleine bereits 36 Zeichen umfaßte. Das System wurde daraufhin so umgestellt, daß 40 Zeichen für den Vornamen, 35 für den Mittelnamen und 40 für den Nachnamen möglich sind. Der Aufwand für die Umstellung wäre vielleicht nicht nötig gewesen, wenn das System von Anfang an ausreichend großzügig bemessen worden wäre.

Von einem noch längeren Namen berichtet: »en.wikipedia.org/wiki/Hubert_Blaine_Wolfeschlegelsteinhausenbergerdorff,_Sr.« oder »http://www.historyrundown.com/top-5-people-with-the-longest-names/«.

Zu beachten ist ferner, daß Personennamen weltweit nicht unbedingt immer so zerlegt werden können (etwa in einen Vornamen und Nachnamen), wie dies bei den klassischen deutschen Namen der Fall ist. Daher könnte es schon zu Problemen führen, wenn in einer Datenbank für Personen Spalten für den Vornamen und Nachnamen vorgesehen werden, nur weil diese Zerlegung in unserer Kultur immer so üblich ist. Ein Vertiefung dieses Themas würde hier aber sicher zu weit führen.

VARCHAR-Literale

Zeichenfolgenliterale haben den Typ »VARCHAR«.

'A'    VARCHAR (1)
'ABC' VARCHAR (3)

Das folgende Transkript zeigt die Verwendung von VARCHAR-Literalen in einfachen Abfragen.

Konsole
SELECT 'A';
+---+
| A |
+---+
| A |
+---+
SELECT 'ABC';
+-----+
| ABC |
+-----+
| ABC |
+-----+

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724227 stefan_ram:724227 Der Typ »VARCHAR« in SQL (MySQL) Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724227, slrprddef724227, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/varchar_sql