Vinnaren i pepparkakshustävlingen!
2010-07-06, 15:09
  #1
Medlem
En vän till mig hävdar att när man skapar kolumner i sina tabeller, så när man väljer vilken typ samt längd det ska vara (Typ VARCHAR(40)). Så även ifall man bara stoppar in låt oss säga 2 tecken, så kommer det ändå tas upp alla 40 tecken. Vet inte vad han menar, men typ "minnet" kommer ändå använda hela utrymmet även fast man bara använder typ 2 av 40 maximala tecken.

Stämmer detta?
Citera
2010-07-06, 15:15
  #2
Moderator
Protons avatar
Näe, varchar kommer ta upp det minne den behöver upp till den angivna gränsen. Hade det varit en char däremot hade den oavsett längd tagit upp det statiskt allokerade utrymmet.

Funkar iaf så i MySQL enligt deras egen referensmanual, vet inte hur det är med andra DBMS.
Citera
2010-07-06, 15:17
  #3
Medlem
Citat:
Ursprungligen postat av Proton
Näe, varchar kommer ta upp det minne den behöver upp till den angivna gränsen. Hade det varit en char däremot hade den oavsett längd tagit upp det statiskt allokerade utrymmet.

Funkar iaf så i MySQL enligt deras egen referensmanual, vet inte hur det är med andra DBMS.

Gäller detta bara varchar eller även för de andra datatyperna? TEXT, BLOB, INT osv?
Citera
2010-07-06, 19:14
  #4
Medlem
rAppmeisters avatar
Citat:
Ursprungligen postat av Andre-Axel
Gäller detta bara varchar eller även för de andra datatyperna? TEXT, BLOB, INT osv?

Undrar du om t.ex. INT(10) skulle resultera i "0000000001" om man bara angav siffran 1?

TEXT går ju inte sätta ett värde på?
Det blir ju "så långt som det blir" har jag förstått det som.
Citera
2010-07-06, 19:47
  #5
Medlem
Citat:
Ursprungligen postat av rAppmeister
Undrar du om t.ex. INT(10) skulle resultera i "0000000001" om man bara angav siffran 1?

TEXT går ju inte sätta ett värde på?
Det blir ju "så långt som det blir" har jag förstått det som.

Precis.
Jodå, TEXT går att sätta värde på. Iaf i PhpMyAdmin, där måste man t.om sätta ett värde.
Citera
2010-07-06, 19:57
  #6
Medlem
rAppmeisters avatar
Citat:
Ursprungligen postat av Andre-Axel
Precis.
Jodå, TEXT går att sätta värde på. Iaf i PhpMyAdmin, där måste man t.om sätta ett värde.

Jag menar ett MAX-värde, precis som med de andra datatyperna. (Trodde du förstod det)
Citera
2010-07-06, 20:03
  #7
Medlem
Citat:
Ursprungligen postat av rAppmeister
Jag menar ett MAX-värde, precis som med de andra datatyperna. (Trodde du förstod det)

Ja det förstod jag. Herregud. :P Tror det blev en missuppfattning. I PHPMYADMIN så måste man ställa in ett max-värde för alla datatyper.
Citera
2010-07-06, 20:27
  #8
Medlem
rAppmeisters avatar
Citat:
Ursprungligen postat av Andre-Axel
Ja det förstod jag. Herregud. :P Tror det blev en missuppfattning. I PHPMYADMIN så måste man ställa in ett max-värde för alla datatyper.
Aha
Då blev det ett litet missförstånd, har för mig att man bara kan låta den vara tom i PHM? (Värdet blir NULL om jag inte missminner mig helt)

Då lägger vi det bakom oss
Citera
2010-07-06, 21:03
  #9
Medlem
metapods avatar
Citat:
Ursprungligen postat av rAppmeister
Aha
Då blev det ett litet missförstånd, har för mig att man bara kan låta den vara tom i PHM? (Värdet blir NULL om jag inte missminner mig helt)

Då lägger vi det bakom oss

Kolumner utav typen TEXT/BLOB kan inte vara NULL utan måste ha ett angivet värde. Värt att tänka på är att en tom sträng (ie. "") är ett "värde" och således är tillåtet.

Det går att sätta ett max-length värde som är mindre än den "fysiska" max-längd som MySQL specificerar som default, dock är detta inte ett krav (vilket syns klart och tydligt om man läser dokumentationen.

En vanlig missuppfattning utav noviser när de arbetar med PhpMyAdmin är att det är PMA som styr vad som är, respektive vad som inte är, tillåtet. PMA är endast ett hjälpmedel för att kommunicera med underliggande DBMS, ingenting annat.
Citera
2010-07-07, 00:55
  #10
Medlem
rAppmeisters avatar
Citat:
Ursprungligen postat av metapod
Kolumner utav typen TEXT/BLOB kan inte vara NULL utan måste ha ett angivet värde. Värt att tänka på är att en tom sträng (ie. "") är ett "värde" och således är tillåtet.

Det går att sätta ett max-length värde som är mindre än den "fysiska" max-längd som MySQL specificerar som default, dock är detta inte ett krav (vilket syns klart och tydligt om man läser dokumentationen.

En vanlig missuppfattning utav noviser när de arbetar med PhpMyAdmin är att det är PMA som styr vad som är, respektive vad som inte är, tillåtet. PMA är endast ett hjälpmedel för att kommunicera med underliggande DBMS, ingenting annat.

Jag är fullt medveten om att PMA enbart är ett grafiskt "hjälpmedel", inte själva hjärnan bakom det hela.
Men senast jag prövade så spelar det ingen roll vad för värde jag sätter på typen TEXT. Den får alltid standarden "inget värde".
Citera
2010-07-07, 10:34
  #11
Medlem
metapods avatar
Citat:
Ursprungligen postat av rAppmeister
Jag är fullt medveten om att PMA enbart är ett grafiskt "hjälpmedel", inte själva hjärnan bakom det hela.
Men senast jag prövade så spelar det ingen roll vad för värde jag sätter på typen TEXT. Den får alltid standarden "inget värde".
Mitt sista stycke var egentligen ej menat till dig, utan endast ett meddelande till den generella grupp som läser på detta forum. Vanligtvis brukar jag indentera mina stycken så att det syns vad som bör läsas utav vem, något jag glömde i föregående inlägg.

Du bör reda ut vad som är ett "värde" och inte, samt vad som bör benämnas som sådan. Pratar du om max-length attributet för ett fält tycker jag ej att det går under "värde" (om man inte skriver "värdet på attributet max-length <snip>".

Syftar du på DEFAULT-värdet för fältet? Om så är fallet är det inga konstigheter där. Fält utav typen TEXT/BLOB kan inte ha ett sådant typ utav värde, dessa fält måste populeras var gång man stoppar in en ny rad i sin tabell.

Det har blivit väldigt många lösrykta begrepp som används i denna tråd. Som vanligt rekommenderar jag därför att man läser dokumentation om huvudbry uppstår, missförstånd gynnar ingen.
Citera
2010-07-13, 17:54
  #12
Medlem
Citat:
Ursprungligen postat av Andre-Axel
Gäller detta bara varchar eller även för de andra datatyperna? TEXT, BLOB, INT osv?

Beror på - de enkla datatyperna tar alltid lika mycket minne i anspråk oavsett värdet som lagras (en int är alltid 4 bytes oavsett om sjävla värdet är 1 eller 2^31).

För de lite mer speciella datatyperna - image, varchar(max) och text exempelvis i MS SQL så lagras dessa inte alls på samma sätt som de vanliga datatyperna (vilka lagras i "data pages" organiserade enligt det klustrade indexet) utan dessa har fått en helt egen minnesrymd allokerad - som måste slås upp vid alla frågor.

Hur de olika databashanterarna arbetar med datat och allokerar minne är en vetenskap för sig och ofta är svaret inte ja eller nej utan väldigt mycket beroende på miljö och situation.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback