Vinnaren i pepparkakshustävlingen!
2014-11-21, 10:57
  #1
Medlem
Ny på databaser och vill skapa upp en enkel tabell. Den ska innehålla id, bildnamn och användarnamn. Dvs informationen kommer inte vara så lång. När man skapar sina tabeller anger man data_type(size), men vad ska jag välja? Hur stor roll spelar det? Tittar man på datatyp av nummer så finns det SMALLINT och INT, har inte det med storleken att göra? Vad anger då storleken inom parantesen?
Citera
2014-11-21, 11:26
  #2
Medlem
AquaRegias avatar
Det kanske beror på vilken databashanterare man använder, men i MySQL så anger siffran inom parentes "display width":

Citat:
For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.)

http://dev.mysql.com/doc/refman/5.0/...ttributes.html

På hårddisken så tar en INT(4) och en INT(8) lika mycket plats. Exakt vilken datatyp man använder är mindre viktigt om man inte räknar med att lagra väldigt mycket data i databasen. Har du bara några tusen rader så spelar det ingen jättestor roll, har du några miljoner rader så är det kanske dags att börja tänka på det.
Citera
2014-11-21, 12:39
  #3
Medlem
Det är mySQL på webbsida.

Mao spelar det ingen roll?

Så sätta alla tal till INT och allt annat till varchar(255)?
__________________
Senast redigerad av _x3m_ 2014-11-21 kl. 12:43.
Citera
2014-11-21, 13:30
  #4
Medlem
Stirra dig inte blind på detta i nuläget då dina krav verkar vara väldigt låga.
Du kan mycket väl köra ex:

id: int(11)
bildnamn: varchar(255)
användarnamn: varchar(255)


Dock är det intressant att veta var användarnamn kommer ifrån. Har du en annan tabell där du sparar dina användare? Isånafall är det ju inte så snyggt att spara användarnamn som en varchar här, utan bättre att spara användar ID som int(11) och referera det till din användartabell (relations).

Sedan om du vet att bildnamn aldrig kommer vara längre än ex 50 tecken så finns det ingen anledning att använda en dispwidth av 255.
Citera
2014-11-22, 16:29
  #5
Medlem
Citat:
Ursprungligen postat av psyninja
Sedan om du vet att bildnamn aldrig kommer vara längre än ex 50 tecken så finns det ingen anledning att använda en dispwidth av 255.
Skulle vilja föreslå "kapacitet", "maxutrymme" eller nåt liknande när det är textfält som det handlar om, för tydlighets skull.
- Siffran inom parentes för VARCHAR och CHAR anger hur många tecken som får plats i det. Dvs hur stort det är, hur stor plats det tar.
- Siffran inom parentes för INT, SMALLINT osv anger hur många siffror som ska användas för värdena. När man använder zerofill och tal mindre än display width så ger det en "padding-effekt", t.ex så kan 127 bli 0127, eller 000127.. Där handlar det alltså inte alls om storlek utan om hur värdena visas.
Citera
2014-11-23, 21:40
  #6
Medlem
KaninenSnuffes avatar
Citat:
Ursprungligen postat av Koenigsegg
Skulle vilja föreslå "kapacitet", "maxutrymme" eller nåt liknande när det är textfält som det handlar om, för tydlighets skull.
- Siffran inom parentes för VARCHAR och CHAR anger hur många tecken som får plats i det. Dvs hur stort det är, hur stor plats det tar.
- Siffran inom parentes för INT, SMALLINT osv anger hur många siffror som ska användas för värdena. När man använder zerofill och tal mindre än display width så ger det en "padding-effekt", t.ex så kan 127 bli 0127, eller 000127.. Där handlar det alltså inte alls om storlek utan om hur värdena visas.

Skillnaden mellan VARCHAR och CHAR är att CHAR upptar max antal bytes i kolumnen. Ex: CHAR(255) tar alltså alltid 255 bytes utrymme per post medan en VARCHAR(255) bara tar upp den mängd bytes som motsvarar antal tecken i kolumnen per post.
Citera
2014-11-23, 22:02
  #7
Medlem
Citat:
Ursprungligen postat av KaninenSnuffe
Skillnaden mellan VARCHAR och CHAR är att CHAR upptar max antal bytes i kolumnen. Ex: CHAR(255) tar alltså alltid 255 bytes utrymme per post medan en VARCHAR(255) bara tar upp den mängd bytes som motsvarar antal tecken i kolumnen per post.
Ok, här handlar det om att väga orden..
- Siffran inom parentes anger för CHAR hur många tecken som får plats i fältet. Oavsett innehåll så blir fältet alltid lika stort. Dvs att lagra 'Hej' i CHAR(200) är inte effektivt(197 teckenplatser outnyttjade) och en bra anledning till att titta på VARCHAR när storleken på fältets innehåll kan väntas variera "stort".
- Siffran inom parentes anger för VARCHAR hur många tecken som maximalt får plats i fältet. Dvs att lagra 'Hej' i VARCHAR(200) tar upp 3 tecken+några få bytes för innehållets längd - databasen måste ju fortfarande på nåt vis veta hur långt datat är. Dvs och som sagts ovan så kan storleken på ett VARCHAR-fält skilja mellan olika rader.
- Siffran inom parentes anger för INT(och SMALLINT, MEDIUMINT osv) hur många siffror som fältets innehåll ska visas med, det har gåtts igenom i tråden. Den påverkar inte hur stora tal fältet kan innehålla. T.ex så tar INT(11), INT(3) och INT(5) alla upp lika stort lagringsutrymme, men kan visas på olika sätt även om de skulle innehålla samma tal(exempel ovan).
__________________
Senast redigerad av Koenigsegg 2014-11-23 kl. 22:03. Anledning: Omformulering för tydligheten
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