Avatar billede baitianlong Nybegynder
05. oktober 2004 - 17:54 Der er 13 kommentarer og
1 løsning

noget om et felts attributter

Hej.

Jeg er lidt i tvivl om noget ganske enkelt. Når man opretter tabeller i SQL bruger man udtryk for datatyper med et parameter (længden?!)

varchar(40) er så vidt jeg ved et tekstfelt på max 40 tegn

Nu til mit spørgsmål:

hvis jeg vil have f.eks "04-10-05" (dags dato i dette format) ind i et felt, skal feltet så være varchar(8) eller varchar(7)

og hvad betyder int(5) at tallet kan have 5 tegn = 99999 ??
Avatar billede arne_v Ekspert
05. oktober 2004 - 18:02 #1
Jeg ville nok bruge DATETIME typen, men ellers er der 8 tegn i din streng altså
VARCHAR(8).

INT(5) betyder et heltal mellem minus 2 milliareder og plus 2 milliarder. Som hvis
MySQL skal vise den vil forsøge at vise med en felt bredde på 5.
Avatar billede baitianlong Nybegynder
05. oktober 2004 - 18:06 #2
Jeg forstår ikke helt den sidste der, arne.
felt-bredde ?

hvad er forskellen på int(2) og int(5) f.eks ?

Jeg har brugt mit lidt sære datoformat for at kunne sortere DESC, kan jeg det med DATETIME ? Jeg tænkte at hvis der står Mandag d. 17 September eller sådan noget, er det lidt kompliceret at få dem i kronologisk rækkefølge.
Avatar billede arne_v Ekspert
05. oktober 2004 - 18:16 #3
Hvis xxx er et felt af typen DATETIME så vil ORDER BY xxx virke.
Avatar billede arne_v Ekspert
05. oktober 2004 - 18:19 #4
Nu har jeg aldrig set den helt store effekt af den bredde.

Men ideern er at det angiver bredden tallet udskrives med.

SELECT a,b,c FROM t med feltbredde 2 bør give
1 2 3
4 5 6
7 8 9

mens det med feltbreded 5 bør give:
    1    2    3
    4    5    6
    7    8    9
Avatar billede baitianlong Nybegynder
05. oktober 2004 - 18:25 #5
Hvis så dateofentry er DATETIME, skal jeg så inserte med (php):

a) INSERT INTO blah(dateofentry) VALUES('time()') ??

b) og hvad får jeg tilbage når jeg selecter fra det felt ?

c) Hvis jeg vil have mulighed for at gemme/hente f.eks et tal fra 0-1000, er det så ligemeget om jeg skriver int(1) eller int(47) ?

:) Lav din kommentar til et svar i samme omgang
Avatar billede arne_v Ekspert
05. oktober 2004 - 18:58 #6
re c)

Ja

I selve MySQL vil den blive vist pænest i f.eks. INT(4), men din PHP/ASP/whatever
applikation er helt ligeglad.
Avatar billede arne_v Ekspert
05. oktober 2004 - 19:01 #7
re a & b)

En DATETIME !

:-)


Du kan indsætte i bl.a. formatet:

'yyyy-mm-dd'

Når du henter ud er det normalt ikke et problem.
Avatar billede arne_v Ekspert
05. oktober 2004 - 19:01 #8
Hvis det sprog du udvikler i understøtter parameters, så kan du helt undgå
format problemerne.
Avatar billede baitianlong Nybegynder
05. oktober 2004 - 19:37 #9
Som jeg skrev øverst i spørgsmålet, indsætter jeg nu som varchar med yy-mm-dd, du anbefaler at bruge DATETIME, her nederst foreslår du så formatet yyyy-mm-dd (det "samme" som min indledning), så forstår jeg ikke pointen i at bruge DATETIME i stedet for. Jeg troede lige der var et eller andet smart ved det ?!

Men anyway, konklusionen er at tallet i parantesen efter int bør bruges som længden af de ønskede værdier, men jeg kan sagtens gemme tallet 2524234 i en int(1). OK !

Jeg beholder min varchar(8) tror jeg, og prøver at forsvare det ved den kommende eksamen... Jeg kan ikke helt se pointen i DATETIME.

Mange tak for hjælpen endnu en gang :)
Avatar billede arne_v Ekspert
05. oktober 2004 - 19:52 #10
Der er nu flere fordele ved DATETIME.

Der er en hel stribe smarte funktioner som kan manipulere DATETIME
værdier.

Den checker delene er valid. Du kan sagtens læse '2004-02-31' ind
i en VARCHAR, men ikke i en DATETIME.

Du kan (i visse sprog) bruge parameters og helt undgå format
problemerne.

Etc.etc..
Avatar billede baitianlong Nybegynder
05. oktober 2004 - 20:05 #11
ok, så kan jeg godt se forskellen. Men det er da sjovt at du ikke kan indlæse '2004-02-31' som du siger, for hvis man nu var interesseret i år, time og minut, skulle det jo være muligt... Men hvad hulen :P

Jeg ved desværre ikke hvad du mener med de parameters.
Avatar billede arne_v Ekspert
05. oktober 2004 - 20:08 #12
Det er noget det gør at man kan indlæse tiden som et binært objekt og
ikke som en tekst streng.
Avatar billede Slettet bruger
06. oktober 2004 - 21:12 #13
MySQL kan også godt forstå yy-mm-dd, så du behøver ikke skrive din dato anderledes, for at putte ind i et DATETIME-felt.

Det rigtigt smarte ved et DATETIME-felt er, at det kan MySQL umiddelbart sortere og beregne på med diverse funktioner. (Da netop din varchar-variant umiddelbart kan oversættes til en DATETIME-værdi kan de fleste funktioner nok også arbejde med den, men jeg vil tro, at en rigtig DATETIME vil være hurtigere at arbejde med, da indholdet så ikke først skal fortolkes og oversættes til en rigtig DATETIME.)
Avatar billede baitianlong Nybegynder
07. oktober 2004 - 00:14 #14
Hele årsagen til at jeg bruger det lidt sære format yy-mm-dd er at man kan trykke på en knap, og så bliver der sorteret efter dette. Et andet sted i samme system, bliver datoen vist som dd/mm - yy. Så der bliver substringet lidt osv. Jeg tror ikke datetime datatypen kan bedre dette, men hvis den kan - vil jeg da naturligvis gerne høre mere... :) Tak for input
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester