Auf welche "VARCHAR(255)-Regel" beziehst du dich?
Jedem Datenbankanbieter steht es frei, VARCHAR nach Belieben zu implementieren. Die Regeln (und Richtlinien) für VARCHAR sind nicht unbedingt für jede Datenbank gleich.
Was den SQL-Standard betrifft, habe ich mich nicht wirklich damit befasst. Es könnte ziemlich locker sein, daher wird festgestellt, dass alle VARCHAR-Implementierungen dem Standard entsprechen. Wenn der SQL-Standard für VARCHAR wirklich streng ist, können DBMS-Anbieter entweder den Standard erweitern oder einfach nicht konform sein. Ich glaube nicht, dass der eigentliche Standard so viel ausmacht. Was zählt, sind die tatsächlichen Regeln, die vom DBMS durchgesetzt werden.
Geben Sie als allgemeine Richtlinie eine VARCHAR-Länge an, die lang genug ist, um die Systemanforderungen zu unterstützen. Wenn die Anforderung des Systems darin besteht, nicht mehr als 200 Zeichen zuzulassen, würde ich die Länge als VARCHAR(200)
angeben .
Als weitere allgemeine Richtlinie sollten Sie keine VARCHAR-Längen definieren, die größer sind als sie sein müssen. Länger als nötig deklarierte VARCHAR-Spalten können sich auf Ressourcen und Leistung auswirken.
Das Oracle-Limit für die VARCHAR-Länge beträgt 4000 Zeichen. (In früheren Versionen von Oracle war das Maximum 2000. Wenn Sie mehr als 4000 Zeichen benötigen, können Sie CLOB
verwenden Datentyp.
SQL Server-Grenze auf VARCHAR(8000)
, es sei denn, Sie geben VARCHAR(MAX)
an was eine maximale Größe (in Byte) von 2^32-1 erlaubt.
MySQL hat ein Limit von 65.535 für die maximale Zeilenlänge. Dadurch wird die Größe von VARCHAR effektiv auf VARCHAR (21844) begrenzt, wenn ein Multibyte-Zeichensatz wie utf8 verwendet wird. Bei einem Einzelbyte-Zeichensatz (wie latin1) wäre das Maximum VARCHAR(65532). Wenn Sie mehr Zeichen als das benötigen oder die Grenze der maximalen Zeilenlänge erreicht, können Sie den Datentyp TEXT anstelle von VARCHAR verwenden.
Die meisten DBMS-VARCHAR-Implementierungen speichern zusammen mit dem Wert ein "Längen"-Feld für eine VARCHAR-Spalte. die Länge wird als ganze Zahl gespeichert.
Wenn in einigen DBMS die maximale Länge (in Byte) einer VARCHAR-Spalte 255 Byte nicht überschreitet, kann das Längenfeld als einzelne Byte-Ganzzahl implementiert werden. Wenn die Spalte mehr als 255 Byte zulässt, muss das Längenfeld größer als ein einzelnes Byte sein.
Bei dynamischen Zeilenformaten spielt es im Hinblick auf die Zeilenspeicherung, die 10 Zeichen in einer Spalte speichert, keine Rolle, ob die Spalte als VARCHAR (30) oder VARCHAR (1000) definiert ist. Bei festen Zeilenformaten wird der Platz für die maximale Länge der Spalte reserviert. Das Format für Zeilenspeicher hängt vom DBMS und in einigen Fällen (MySQL) von der Speicher-Engine und dem angegebenen Zeilenformat ab.
Ja, wir schreiben das Jahr 2016. Und wir haben seit der Einführung des ersten kommerziellen relationalen Datenbanksystems einen langen Weg zurückgelegt.
Die Datenbank ist nur ein Teil des Systems. Es können Beschränkungen in der Anwendung oder anderen Softwarekomponenten bestehen. (Wenn die Anwendung in C geschrieben ist und die Anwendung eine Struktur mit einem Byte-Array für das Feld definiert, wird die Begrenzung der Größe dort wichtig sein. Das Erhöhen der in der Datenbank zulässigen Größe wird die Anwendung nicht automatisch reparieren .
Es kann auch Längenbegrenzungen/-einschränkungen im Javascript-Code oder in HTML-Elementen einer Webseite geben. Oder es kann Einschränkungen anderer Softwarekomponenten geben. Beispielsweise haben einige der wirklich alten SQL Server-ODBC-Treiber eine Begrenzung von 255 Zeichen (Bytes?) für CHAR- und VARCHAR-Spalten.
Die Länge eines VARCHAR in der Datenbank ist also nur ein Teil der Geschichte.
Nach alledem ist mir immer noch nicht klar, was Sie meinen, wenn Sie fragen
Können wir die VARCHAR(255)-Regel brechen?
Ich frage mich, welche "Regel" Sie meinen. In den meisten mir bekannten Datenbanken ist es möglich, VARCHAR-Spalten zu definieren, die viel länger als 255 Bytes oder 255 Zeichen sind. Und das zu tun verstößt gegen keine Regel.