Ist varchar
nur ein Überbleibsel aus der Zeit vor text
kam um, oder gibt es Fälle verwenden , wo Sie würden wollen ein verwenden varchar
? (Oder char
für diese Angelegenheit ..)
(Ich verwende täglich Postgres und MySQL (MyISAM). Das interessiert mich am meisten, aber Antworten für andere Datenbanken sind natürlich willkommen. ^ _-)
database
performance
mysql
efficiency
postgres
Izkata
quelle
quelle
text
ist veraltet. Es gibt auch Nutzungsüberlegungen, die sich darauf beziehen, wo die Daten gespeichert werden und wie auf sie zugegriffen wird.Antworten:
Im Allgemeinen
text
Spalten sind nicht standard und implementierungsspezifisch. In vielen Fällen gelten je nach Datenbank eine oder mehrere der folgenden Einschränkungen: Nicht indizierbar , nicht durchsuchbar und nicht sortierbar .In Postgres
Alle diese Typen werden intern mit derselben C-Datenstruktur gespeichert. .
In MySQL
Die
text
Spalte ist eine Spezialversion vonBLOB
und unterliegt Indexeinschränkungen.Nur diese beiden Beispiele können auf die anderen SQL RDBMS-Systeme hochgerechnet werden und sollten Grund genug sein, zu verstehen, wann ein Typ den anderen vorzuziehen ist.
CHAR
Sie diese Option, wenn Sie wissen, dass Sie für jeden Eintrag eine feste Anzahl von Zeichen haben.VARCHAR
Sie diese Option, wenn Sie für jeden Eintrag eine variable Anzahl von Zeichen haben.VARCHAR
bereitstellen können,CLOB
mitUTF-8
Codierung oder gleichwertigem Standardtyp.TEXT
da dies nicht dem Standard entspricht.quelle
non standard and implementation specific
undnot indexable, not searchable and not sortable
, was ich nicht realisiert habe. Ich hatte den Eindruck ,text
wurde standardisiert.text
Standard oder den UNICODE-text
Standard :-) oder einen der anderen ein halbes Dutzendtext
Codierungsstandards?text
einen Zeichentyp finden. Ich habe nichts gesehen, manche Anbieter nennen eslong char
und ähnliches, es ist im Grunde ein BLOB mit einer daran angehängten Codierung.TEXT
". Wenn Sie auf eine andere Datenbank migrieren, ist das kaum ein Deal Breaker, zumal Sie berücksichtigen müssen, dass postgres 'unbegrenztVARCHAR
(aufgrund von TOAST gibt es keine Zeilenbegrenzung wie zum Beispiel bei MySQL) möglicherweise nicht unbegrenztVARCHAR
in übersetzen kann andere Datenbanken sowieso.text
,varchar
Undchar
sind alle aus verschiedenen Gründen verwendet. Es gibt natürlich Implementierungsunterschiede (wie viel Größe sie einnehmen ... usw.), aber es gibt auch Verwendungs- und Vorsatzüberlegungen . Welche Art Sie verwenden, sagt Ihnen auch etwas über die Art der Daten aus, die darin gespeichert werden (oder wir würden sie alletext
für alles verwenden ). Wenn etwas eine feste Länge hat, verwenden wirchar
. Wenn es eine variable Länge mit einer genau definierten Obergrenze hat, verwenden Sievarchar
. Wenn es sich um einen großen Textblock handelt, über den Sie nur wenig Kontrolle haben, isttext
dies wahrscheinlich die beste Wahl.quelle
char
,varchar
, undtext
alle sind so konzipiert , das gleiche für die Speicherung Art von Daten. Bei beiden Antworten geht es also um die Überprüfung von Grenzen. Wenn es Effizienzunterschiede gibt, welche? Warum sollte ichvarchar
über verwendentext
?Datenbanken beschäftigen sich intensiv mit der Leistung - Geschwindigkeit und der Minimierung des Speichers. In den meisten anderen Teilen der Computerwelt wird es Sie nicht stören, wie viele Zeichen sich in Ihrer Zeichenfolge befinden. es könnte einer sein, es könnte der gesamte Inhalt einer Enzyklopädie sein; Es ist alles nur eine Schnur. Tatsächlich stören Sie viele Sprachen nicht einmal, ob es sich um eine Zeichenfolge oder eine Zahl handelt.
Da Computer jedoch schneller werden und mehr Arbeitsspeicher gewinnen, speichern die Benutzer mehr Daten in ihren Datenbanken und führen anspruchsvollere Abfragen durch. Für eine Datenbank sind CPU und Arbeitsspeicher heute genauso begrenzt wie zu Zeiten von 64-KB-Hauptspeicher und 10-MB-Festplatten (auf Mainframe- Computern).
Eine feste Anzahl von Bytes ist viel einfacher zu handhaben als eine Zahl mit variabler Länge. 10 Bytes sind viel einfacher zu handhaben als 1.000.000. Ihre Datenbank möchte also, dass Sie ihm einen Hinweis geben, damit Sie ein Gigabyte an Ergebnissen aus Terrabyte an Daten in Mikrosekunden erhalten. Wenn Sie Ihre Datenbank nicht so intensiv nutzen, brauchen Sie nicht die Geschwindigkeit, die sie bietet, und ärgern sich über die unnötigen Fragen. Aber wenn Sie die Leistung brauchen, geben Sie ihr gerne einige Tipps.
Wie in den anderen Antworten erwähnt, Gebrauch
char
verwendet , wenn es immer eine bestimmte Anzahl von Zeichen,varchar
wenn die Länge variieren kann , aber es ist nicht zu groß wird (meine Vermutung ist am DB behandelt es als einenchar
odertext
je nach Größe), undtext
wenn es könnte beliebig lang sein. Wenn Ihr SQL versucht , eine zu verwenden ,text
Spalte, könnte es am besten sein , es irgendwie zu fassen und es in einer setzenchar
oder kleinervarchar
Spalte auch dann tunwhere
‚s undorder by
‘ auf , dass s. Natürlich nur, wenn Ihnen die Leistung wichtig ist.quelle