In mehreren Kursen, Büchern und Jobs habe ich Textfelder, die als VARCHAR (255) definiert sind, als Standard für "kurzen" Text gesehen. Gibt es einen guten Grund, warum eine Länge von 255 so oft gewählt wird, außer eine schöne runde Zahl zu sein ? Ist es ein Überbleibsel aus einer Zeit in der Vergangenheit, als es einen guten Grund gab (ob es heute gilt oder nicht)?
Mir ist natürlich klar, dass ein engeres Limit idealer wäre, wenn Sie irgendwie die maximale Länge der Saite kennen. Wenn Sie jedoch VARCHAR (255) verwenden, bedeutet dies wahrscheinlich, dass Sie die maximale Länge nicht kennen, sondern nur, dass es sich um eine "kurze" Zeichenfolge handelt.
Hinweis: Ich habe diese Frage gefunden ( varchar (255) v tinyblob v tinytext ), die besagt, dass VARCHAR ( n ) n +1 Byte Speicher für n <= 255, n +2 Byte Speicher für n > 255 benötigt. Ist das der einzige Grund? Das scheint willkürlich zu sein, da Sie im Vergleich zu VARCHAR (256) nur zwei Bytes speichern würden, und Sie könnten genauso gut zwei weitere Bytes speichern, indem Sie es als VARCHAR (253) deklarieren.
quelle
255 wird verwendet, weil es die größte Anzahl von Zeichen ist, die mit einer 8-Bit-Zahl gezählt werden können. Es maximiert die Verwendung der 8-Bit-Zählung, ohne leichtfertig ein weiteres ganzes Byte zu benötigen, um die Zeichen über 255 zu zählen.
Auf diese Weise verwendet VarChar nur die Anzahl der Bytes + 1, um Ihren Text zu speichern. Sie können ihn also genauso gut auf 255 setzen, es sei denn, Sie möchten eine feste Grenze (wie 50) für die Anzahl der Zeichen im Feld.
quelle
utf8
,varchar(85)
ist die Grenze, über die die Kreuzung das Längenbyte von einem auf zwei Bytes kippt. Wenn jautf8mb4
, ist esvarchar(63)
. Diese sind von Bedeutung, da sie das Maximum darstellen, bis zu dem die Länge eines VARCHAR durch die Verwendung von Online-ALTER TABLE verlängert werden kann . Folglich habe ich diese Zahlen abgeleitet, indem ich eine Tabelle mit einervarchar(2) charset utf8
Spalte erstellt und gesehen habe, wie weit ich sie gegeben haben konnteALGORITHM=INPLACE
.Wahrscheinlich, weil sowohl SQL Server als auch Sybase (um nur zwei zu nennen, mit denen ich vertraut bin) maximal 255 Zeichen in der Anzahl der Zeichen in einer
VARCHAR
Spalte hatten. Für SQL Server hat sich dies in Version 7 1996/1997 oder so geändert ... aber alte Gewohnheiten sterben manchmal schwer.quelle
Ich werde die wörtliche Frage beantworten: Nein , es gibt keinen guten Grund, warum VARCHAR (255) so oft verwendet wird (es gibt tatsächlich Gründe , wie in den anderen Antworten erläutert, nur keine guten). Sie werden nicht viele Beispiele für Projekte finden, die katastrophal gescheitert sind, weil der Architekt VARCHAR (300) anstelle von VARCHAR (255) gewählt hat. Dies wäre ein Problem von nahezu völliger Bedeutungslosigkeit, selbst wenn Sie über CHAR anstelle von VARCHAR sprechen würden.
quelle
Wenn Sie sagen,
2^8
Sie bekommen256
, aber die Zahlen in Computerbegriffen beginnen von der Zahl0
. Dann haben Sie das255
, Sie können es in einer Internetmaske nach der IP oder in der IP selbst suchen.255
ist der Maximalwert einer 8-Bit-Ganzzahl:11111111 = 255
Hilft das?
quelle
Nein. Sie speichern nicht zwei Bytes, indem Sie 253 deklarieren. Die Implementierung des varchar ist höchstwahrscheinlich ein Längenzähler und ein nicht abgeschlossenes Array mit variabler Länge. Dies bedeutet, dass Sie, wenn Sie "Hallo" in einem Varchar (255) speichern, 6 Bytes belegen: ein Byte für die Länge (die Nummer 5) und 5 Bytes für die fünf Buchstaben.
quelle
VARCHAR
diese Weise macht den ganzen Sinn der Verwendung vonVARCHAR
zunichteCHAR
.Eine vorzeichenlose 1-Byte-Nummer kann den Bereich [0-255] einschließlich enthalten. Wenn Sie also 255 sehen, liegt das hauptsächlich daran, dass Programmierer in der Basis denken
10
(verstehen Sie den Witz?) :)Tatsächlich war 255 für eine Weile die größte Größe, die Sie einem VARCHAR in MySQL geben konnten, und die Verwendung von VARCHAR gegenüber TEXT bei der Indizierung und anderen Problemen bietet Vorteile.
quelle
In vielen Anwendungen wie MsOffice (bis Version 2000 oder 2002) betrug die maximale Anzahl von Zeichen pro Zelle 255. Das Verschieben von Daten aus Programmen, die mehr als 255 Zeichen pro Feld verarbeiten können, zu / von diesen Anwendungen war ein Albtraum. Derzeit ist das Limit immer weniger hinderlich.
quelle
0000 0000 -> Dies ist eine 8-Bit-Binärzahl. Eine Ziffer steht für ein bisschen.
Sie zählen so:
0000 0000 → (0)
0000 0001 → (1)
0000 0010 → (2)
0000 0011 → (3)
Jedes Bit kann einer von zwei Werten sein: Ein oder Aus. Die höchste Gesamtzahl kann durch Multiplikation dargestellt werden:
Oder
Wir subtrahieren eins, weil die erste Zahl 0 ist.
255 kann ziemlich viele Werte enthalten (kein Wortspiel beabsichtigt).
Wenn wir mehr Bits verwenden, steigt der Maximalwert exponentiell an. Daher ist das Hinzufügen weiterer Bits für viele Zwecke übertrieben.
quelle
Ein weiterer Grund kann sein, dass Sie in sehr alten Datenzugriffsbibliotheken unter Windows wie RDO und ADO (COM-Version nicht ADO.NET) eine spezielle Methode, GetChunk, aufrufen mussten, um Daten aus einer Spalte mit mehr als 255 Zeichen abzurufen. Wenn Sie eine Varchar-Spalte auf 255 beschränkt haben, war dieser zusätzliche Code nicht erforderlich.
quelle