SQL VARCHAR Länge?

4 Antworten

Zumindest bei Microsoft ist das nicht so. Da verbraucht ein NVARCHAR(255) immer 510 Byte (die Nicht-Unicode-Variante VARCHAR(255) dementsprechend 255), unabhängig davon, wieviele Zeichen tatsächlich drinstehen. Nur bei TEXT, (N)VARCHAR(MAX) und VARBINARY(MAX) steht nur ein Pointer im Datensatz.


Jerrycrafting 
Beitragsersteller
 28.07.2020, 15:55

Sorry hätte mich genau ausdrücken sollen. Es geht um mySQL

0

"bei SQL"?

SQL ist das Werkzeug, mit dem Du Verbindungen in Datenbanken bereitstellst. Was in einer Datenbank wie gespeichert wird, ist in keiner Weise gleich! Sondern es gibt zahllose Datenbankspeichermethoden.

Firebird, Access, Oracle, mySQL, SQLite, und dutzende anderes. Alle funktionieren intern anders, Wieviele davon VarChart kennen, weiß ich nicht. Vermutlich so gut wie alle. Wie das hingegen intern gespeichert wird, - das kann ein weites Land sein. Vor allem ist es extrem kompliziert.

Darüber hinaus gibt es "compress" Formate von DBs fürs Backup. Wird wieder anders gespeichert.

Woher ich das weiß:Studium / Ausbildung – siehe auch Computer

Jerrycrafting 
Beitragsersteller
 28.07.2020, 15:47

Du hast recht: Dann spezifiziere ich hiermit meine Frage: Ich nutze MySQL

0
Mauritan  28.07.2020, 15:55
@Jerrycrafting

Ich kenne mich nur in Firebird ein bisschen aus, in mySQL nur von der Oberfläche her, nicht vom innen-drin.

Was sagt denn die Dokumentation, dass VarChart in mySQL gespeichert würden? Mit wievielen Bits oder Bytes pro Zeichen? Es wird ja auch eine Frage des Zeichensatzes sein. Unicode braucht mehr als 8-Bit Sätze uam.

und nicht zuletzt: Magst Du die konkrete Problemstellung posten? Was willst Du wie kodieren und wofür?

Ein weiterer möglicher Grund wäre, dass auch select-Abfragen etc. ihre Arbeitsspeicher reservieren müssen, bevor sie laufen. Vielleicht ist das je nach Angabe der Länge verschieden.

0

Manche Dinge kommen aus Zeiten, als Speicherplatz rar war ;-)


Jerrycrafting 
Beitragsersteller
 28.07.2020, 15:40

Ja das ist schon klar, aber wie gesagt, es macht ja keinen Unterschied für den Speicher.

0
Jerrycrafting 
Beitragsersteller
 28.07.2020, 15:46
@unkreativ1977

dann bedanke ich mich für die Erklärung :) Leider hilft es mir bezüglich meiner Frage nicht weiter.

1
unkreativ1977  28.07.2020, 15:48
@Jerrycrafting

Schade. Transferleistung Mangelhaft ;)
Früher hast Du um jedes Byte gekämpft. Wenn Du wusstest, dass ein Feld einen maximalen Inhalt haben kann, hast Du es darauf beschränkt, damit Du möglichst wenig Speicher belegst. Heute nutzt man das manchmal um Obergrenzen zu definieren (Länge von Eingabefeldern), einen tatsächlichen Sinn wie früher hat es aber nicht mehr.

0
Jerrycrafting 
Beitragsersteller
 28.07.2020, 15:53
@unkreativ1977

Hat für mich nichts mit Transfer zu tun. Klar war Speicher früher rarer. Aber wenn es früher nicht so war, dass immer der tatsächliche Speicher genutzt wird beim VARCHAR kann ich das nicht wissen. Ich lerne Datenbanken im Jahr 2020 das erste Mal und weiß somit nicht wie die Methoden früher waren, bzw. ob sie sich geändert haben. Für mich gab es nur den normalen Char als alternative für die Speicherbelegung des angegebenen Wertes.

Aber dein letzter Satz mit der Obergrenze hat mir geholfen danke.

0

Um Fehler bei falschem Input zu bekommen. Z.b bei eine Password hash hast du ja immer eine feste Länge.

Woher ich das weiß:Studium / Ausbildung – Informatikstudent