SQL Unterschied (var)char, int und double

Cyda

Lieutenant
Dabei seit
Jan. 2011
Beiträge
897
Hallo, ich beschäftige mich derzeit mit sql.
Derzeit hänge ich bei varchar, char, int und double fest. Habe schon verschiedene Anleitungen gelesen aber es will mir nicht einleuchten. :(

Char kann max. 30 Zeichen lang sein und varchar 255. Warum nocht gleich immer varchar? Und double ist für Zahlen. Könnt ihr mir die Unterschiede vielleicht erklären?
 

shadow_one

Captain
Dabei seit
Okt. 2005
Beiträge
3.431
int = ganze Zahlen.
double = Fließkommazahlen.
 

godofkills

Lt. Commander
Dabei seit
Dez. 2009
Beiträge
1.997
Aus Speichergründen wählt man andere Deklarationen. Aber in Zeiten von Terrabyte ist das bei kleinen Datensätzen egal.
 

scavenger

Ensign
Dabei seit
März 2004
Beiträge
175
int: ganze Zahlen, also ohne Komma
double: Kommazahlen

Und wenn char reicht, was die Anzahl der Zeichen angeht, sollte man das auch nehmen, um den Festplatten- und Arbeitsspeicher zu schonen. Es kommt hier natürlich auf die Größe des Projekts an, ob man darauf überhaupt achten muss.
 

Zwickl-Pain

Lt. Junior Grade
Dabei seit
Dez. 2005
Beiträge
341
Du solltest dir angewöhnen immer das kleinste zu nehmen was nötig ist, zumindest lernen ich es so
 

MoPe

Cadet 4th Year
Dabei seit
Apr. 2011
Beiträge
104
Zusätzlich zur Reduzierung des Arbeitsaufwandes der Datenbank durch kleinere Datentypen bringen sie noch den Vorteil der Eingabevalidierung. Größere Daten können gar nicht erst in den Feldern abgelegt werden, da sie z. B. als character deklariert sind. Bringt ein bisschen mehr Sicherheit.
 

ElfenLied

Commander
Dabei seit
März 2011
Beiträge
2.618
Es kommt immer auf den Verwendungszweck einer Variable an. Char hat Vor- und Nachteile gegenüber Varchar, größter Unterschied neben der max. Speicherlänge ist zB auch die Art der Speicherung, da eine kleinere Zeichenkette bei Char durch Leerfelder aufgefüllt wird, bis sie die deklarierte Länge hat... Somit verbraucht Char einen fest definierten Speicherplatz, während varchar variabel ist (Variable Character Field ;).
Den genauen Unterschied kannst du aber auch hier nachlesen MySQL.

Hier kannst du die anderen Datentypen nachlesen: Data Types

Heutzutage sind manche mehr oder weniger überflüssig da man nicht mehr so auf Speicherplatz achten muß, trotzdem haben alle ihre Vor- und Nachteile. Um sauber zu programmieren und Fehler zu vermeiden sollte man schon versuchen für jede Variable sich vorher klar zu machen, welche Daten zulässig sind und dem entsprechend den Datentyp aussuchen...
 
Y

yxcv

Gast
Viele gute Hinweise und Quellen sind schon dabei gewesen.
Anwendungsbeispiele und konkrete Beantwortung deiner Frage fehlen aber noch.

Warum nicht gleich immer varchar?
Ja, varchar hat den Vorteil nur soviel Speicherplatz zu nutzten, wie tatsächlich benötigt wird.
Nützlich ist dies bei stark variierenden Zeichenlängen wie es bei Kommentaren/Beschreibungen.
Da die Speichergröße jedoch Zelle für Zelle individuell bestimmt werden muss, ist der Speicher- und Lesevorgang relativ aufwendig und es wird mehr Zeit benötigt.

Deshalb sollte char immer genutzt werden, wenn die gespeicherten Zeichen (fast) immer gleich lang sind.
Dies ist z.B. bei Autokennzeichen, Ausweis- oder Kundennummern der Fall.

int (Ganzzahlen) sind bswp. für PLZ, HausNr und double(Kommazahl) Preise geeignet.
 

NullPointer

Lt. Commander
Dabei seit
Okt. 2009
Beiträge
1.570
Zitat von Cyda:
Char kann max. 30 Zeichen lang sein und varchar 255. Warum nocht gleich immer varchar? Und double ist für Zahlen. Könnt ihr mir die Unterschiede vielleicht erklären?

Stimmt nicht; Char kann maximal 255 Zeichen lang sein, VARCHAR sogar 65.535 (2^16-1). Es kommt darauf an, wie du ihn deklarierst: CHAR(30) ist 30 Zeichen lang, VARCHAR(1000) eben 1000 Zeichen usw.

Der andere Unterschied zwischen CHAR und VARCHAR ist, daß bei CHAR alle Felder intern genau die angegebene Länge haben, auch wenn der tatsächliche Inhalt kürzer ist. Bei VARCHAR werden nur die tatsächlich vorhandenen Zeichen gespeichert. Also belegt ein String der Länge 10, gespeichert als VARCHAR(1000), 10 Byte, als CHAR(255) aber 255.

In der Regel ist VARCHAR also platzsparender als CHAR. Andererseits muß bei VARCHAR-Feldern die Länge des Inhalts jeweils mit abgespeichert werden, was pro Zeile 1-2 Bytes Overhead verursacht. Wenn also die genaue Länge der Inhalte einer bestimmten Spalte im voraus bekannt ist (Hashwerte z. B.), dann bietet sich CHAR dafür an.
 
Top